合并两个非递减链表
#include<iostream.h> #include<stdlib.h> #define LIST_INIT_SIZE 100 #define OK 1 #define OVERFLOW -2 #define ERROR 0 typedef int Status; typedef int ElemType; typedef struct LNode { ElemType data; //数据域 struct LNode *next; //指针域 }LNode,*LinkList; Status InitList_L(LinkList &L) { //构造一个空的链表 L=new LNode; if(!L) exit(OVERFLOW); L->next=NULL; return OK; }//InitList_L void CreateList_L(LinkList &L,int n) { //正序输入n个数据元素,建立带头结点的单链表 LNode *p; LinkList S; L=new LNode; L->next=NULL; S=L; //建立带头结点/尾指针的单链表 for(int i=1;i<=n;++i) { p=new LNode; cin>>p->data; //输入元素值 p->next=S->next; S->next=p; S=p; //插入 } }//CreateList_L void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc) { //归并La,Lb得到单链表Lc,Lc的元素非递减排列 LNode *pa,*pb,*pc; pa=La->next; pb=Lb->next; //p指向第一个结点 Lc=pc=La; while(pa && pb) { if(pa->data<=pb->data) { pc->next=pa; pc=pa; pa=pa->next; } else { pc->next=pb; pc=pb; pb=pb->next; } pc->next=pa?pa:pb; } }//MergeList_L void visit_L(LinkList L) { LNode *p=L->next; while(p) { cout<<p->data<<" "; p=p->next; } cout<<endl; } void main() { LinkList La,Lb,Lc; int n; InitList_L(La); cout<<"input La n="; cin>>n; CreateList_L(La,n); visit_L(La); cout<<endl; InitList_L(Lb); cout<<"input Lb n="; cin>>n; CreateList_L(Lb,n); visit_L(Lb); cout<<endl; MergeList_L(La,Lb,Lc); visit_L(Lc); }