6:求序列的交集(链表) c++

    技术2023-07-15  92

    问题描述 :

    使用带头结点的单链表编程:

    有两个序列,分别表示两个集合。

    求它们的交集并输出。

    输入说明 :

    第一行输入序列A的信息:

    第一个整数n(0<=n<=100),表示共有n个元素,其后有n个整数,表示n个元素的数据

    第一行输入序列B的信息:

    第一个整数n(0<=n<=100),表示共有n个元素,其后有n个整数,表示n个元素的数据

    输出说明 :

    输出交集的元素序列,输出格式见范例。

    如果交集为空,则输出“head–>tail”

    交集里的元素顺序,依照其在序列A中的顺序。

    比如:

    序列:

    A:5 3 2 7

    B:1 3 5 8

    则交集为5和3,因为在序列A中,5在3的前面,所以在交集里5也在3的前面。

    输入范例: 4 5 3 2 7

    输出范例: head–>5–>3–>tail

    #include<iostream> using namespace std; struct ListNode { int data; struct ListNode *next; }; ListNode *create(int arr[],int num) { ListNode *head,*p,*r; head=new ListNode; head->next=NULL; r=head; for(int i=0;i<num;i++){ p=new ListNode; p->data=arr[i]; r->next=p; r=p; } r->next=NULL; return head; } int main() { int n1,n2; cin>>n1; int arr1[100]; for(int i=0;i<n1;i++) cin>>arr1[i]; cin>>n2; int arr2[100]; for(int i=0;i<n2;i++) cin>>arr2[i]; ListNode *A=create(arr1,n1); ListNode *B=create(arr2,n2); ListNode *pa=A->next; ListNode *pb=B->next; cout<<"head-->"; while(pa){ while(pb){ if(pa->data==pb->data) { cout<<pa->data<<"-->"; break; } pb=pb->next; } pa=pa->next; pb=B->next; } cout<<"tail\n"; return 0; }
    Processed: 0.010, SQL: 9