要求:创建两个无头结点的单链表,头指针分别为ha,hb,链中有数据data和指针域next,两个链表的数据都按照不递减存放,现在要求将hb归并到ha表中,归并后要求ha依然递增有效,归并中的ha表中的元素如果hb表中也有,则该元素不再重复归并到ha中,hb在算法中不能被破坏。
#include<iostream> using namespace std; struct node { int data; node* next; }; node *ha,*hb; int main() { int n,m; cin>>n; node *pa,*pb,*pre,*r; ha=(node*)malloc(sizeof(node)); ha->next=NULL; pa=ha; while(n--) { pb=(node*)malloc(sizeof(node)); cin>>pb->data; pa->next=pb; pa=pb; pa->next=NULL; } cin>>m; hb=(node*)malloc(sizeof(node)); hb->next=NULL; pb=hb; while(m--) { pa=(node*)malloc(sizeof(node)); cin>>pa->data; pb->next=pa; pb=pa; pb->next=NULL; } r=hb; hb=hb->next; free(r); pre=ha; pa=ha->next; pb=hb; while(pa&&pb) { if(pa->data<pb->data) { pre=pa; pa=pa->next; } else if(pa->data==pb->data) { pb=pb->next; } else { node *x; x=(node*)malloc(sizeof(node)); x->data=pb->data; pre->next=x; pre=x; pre->next=pa; pb=pb->next; } } if(pb) { node* x; x=(node*)malloc(sizeof(node)); x->data=pb->data; pa=x; pa->next=NULL; pre->next=pa; pb=pb->next; } while(pb) { if(pb->data==pa->data) pb=pb->next; else if(pb->data>pa->data) { node *x; x=(node*)malloc(sizeof(node)); x->data=pb->data; pa->next=x; pa=x; pa->next=NULL; pb=pb->next; } } r=ha; ha=ha->next; free(r); while(ha) { cout<<ha->data<<" "; ha=ha->next; } cout<<endl; system("pause"); return 0; }