问题描述 :
使用带头结点的单链表编程:
有两个有序序列,分别表示两个集合。
求它们的交集并输出。
注意:这里要利用到“有序”的特性。
输入说明 :
第一行输入序列A的信息:
第一个整数n(0<=n<=100),表示共有n个元素,其后有n个整数,表示n个元素的数据
第一行输入序列B的信息:
第一个整数n(0<=n<=100),表示共有n个元素,其后有n个整数,表示n个元素的数据
注:两个序列输入时保证有序
输出说明 :
输出交集的元素序列,输出格式见范例。
如果交集为空,则输出“head–>tail”
输入范例: 4 1 3 5 7
输出范例: head–>1–>5–>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; } else if(pa->data<pb->data) break; pb=pb->next; } pa=pa->next; pb=B->next; } cout<<"tail\n"; return 0; }