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

问题描述 :

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

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

求它们的交集并输出。

输入说明 :

第一行输入序列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
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;
}

你可能感兴趣的:(东华——高级程序设计)