已知兩個連結串列A和B分別表示兩個集合,其元素遞增排列。請設計一個演算法,用於求出A與B的交集,並存放在A連結串列中。
阿新 • • 發佈:2018-10-31
語言:C++
#include <iostream> using namespace std; typedef struct LNode { int data; LNode *next; }LNode,*LinkList; //建立連結串列 int CreateList(LinkList &L,int n) { LNode *p,*r;int i; L=new LNode; L->next=NULL; r=L; for(i=0;i<n;i++) { p=new LNode; cin>>p->data; p->next=NULL;r->next=p; r=p; } return 0; } //輸出連結串列 void display(LinkList L) { LNode *p; p=L->next; cout<<"{"; while(p) {cout<<p->data<<" "; p=p->next;} cout<<"}"<<endl; } //交集 void MergeList_L(LinkList &LA,LinkList &LB,LinkList &LC) { LNode *pa;LNode *pb;LNode *pc;LNode *p; pa=LA->next;pb=LB->next; LC=LA; pc=LC; while(pa&&pb) { if(pa->data==pb->data) { pc->next=pa; pc=pa; pa=pa->next; pb=pb->next; } else if (pa->data<pb->data) pa=pa->next; else pb=pb->next; } pc->next=NULL; LA=LC; delete LB; } int main() { LinkList LA;LinkList LB;LinkList LC;int n; cout<<"請輸入需要建立的A集合元素的個數:"<<endl; cin>>n; cout<<"請依次輸入需要存入的資料(尾插法&&遞增):"<<endl; CreateList (LA,n); cout<<"請輸入需要建立的B集合元素的個數:"<<endl; cin>>n; cout<<"請依次輸入需要存入的資料(尾插法&&遞增):"<<endl; CreateList (LB,n); cout<<"集合A為:"; display(LA); cout<<"集合B為:"; display(LB); MergeList_L(LA,LB,LC); cout<<"二者的交集為:"; display(LA); return 0; }