2-12 两个有序链表序列的交集 (20 分)

已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。

输入格式:
输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。

输出格式:
在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。

输入样例:
1 2 5 -1
2 4 5 8 10 -1

输出样例:
2 5

上一题(2-11 两个有序链表序列的合并 (20 分))拿来改改接着用:P

#include<bits/stdc++.h>
using namespace std;
typedef struct LNode{
    int data;
    struct LNode *tail;
    struct LNode *next;
}LNode,*LinkList;
void creat(LinkList &L){
    L=(LinkList)malloc(sizeof(LNode));
    L->next=NULL;
    L->tail=NULL;
    int n,cnt=0;
    while(cin>>n&&n!=-1){
        LinkList p=(LinkList)malloc(sizeof(LNode));
        p->data=n;
        if(cnt!=0){
            LinkList q=L->tail;
            q->next=p;
            p->next=NULL;
            L->tail=p;
        }
        else{
            L->next=p;
            p->next=NULL;
   	    L->tail=p;
  	}
  	cnt++;
    }
}
void print(LinkList &L){
    LinkList p=L->next;
    if(p==NULL) cout<<"NULL"<<endl;
    else{
        int i=0;
        while(p!=NULL){
            if(i++) cout<<" ";
            cout<<p->data;
            p=p->next;
        }
    cout<<endl;
    }
}
void AC(LinkList &A,LinkList &B,LinkList &C){
    LinkList pa,pb,pc;
    pa=A->next;
    pb=B->next;
    C=(LinkList)malloc(sizeof(LNode));
    pc=C;
    while(pa&&pb){
   	if(pa->data<pb->data) pa=pa->next; 
        else if(pb->data<pa->data) pb=pb->next;
  	else{
   	    LinkList q=(LinkList)malloc(sizeof(LNode));
  	    q=pa;
    	    pa=pa->next;
	    pb=pb->next;
 	    pc->next=q;
	    pc=q;
       }
    }
}
int main()
{
    LinkList A,B,C;
    creat(A);
    creat(B);
    AC(A,B,C);
    print(C);
    return 0;
}