问题描述 :
使用带头结点的单链表编程:
有两个序列,分别表示两个集合。
求它们的交集并输出。
输入说明 :
第一行输入序列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; }