有序链表的归并

来源:互联网 发布:宣州太守知不知 编辑:程序博客网 时间:2024/06/12 21:06
#include<iostream>using namespace std;typedef struct LNode//定义单链表{int data;struct LNode *next;}LNode,*LinkList;void InitList_L(LinkList &L)//创建单链表{L=new LNode;L->next=NULL;}void input(LinkList &L,int n)//依次往单链表L里输入数据{int i;LinkList p,r;r=L;cout<<"请输入该表的元素(按非递减的顺序):";for(i=0;i<n;i++){p=new LNode;cin>>p->data;p->next=NULL;r->next=p;r=p;}}void output(LinkList L)//依次输出单链表里的每个元素{int i=0;LNode *p;p=L->next;while(p){if(i)cout<<",";cout<<p->data;p=p->next;i=1;}}void MergeList_L(LinkList &LA,LinkList &LB,LinkList &LC)//算法2.16 链式有序表的合并{//已知单链表LA和LB的元素按值非递减排列//归并LA和LB得到新的单链表LC,LC的元素也按值非递减排列      //以下填空缺部分LNode *A=LA->next,*B=LB->next,*p=LC=LA;//定义LA,LB链表上的标记,并让LC与LA共用一个头节点 while(A&&B)//当LA和LA均没比较完时 {if(A->data<B->data)//比较 {p->next=A;p=A;A=A->next;}else{p->next=B;p=B;B=B->next;}}if(A)//连接剩下的一个非空链表 p->next=A;elsep->next=B;delete LB;}//MergeList_L()int main(){LinkList La,Lb,Lc;int num_a,num_b;cout<<"请输入非递减单链表a的个数n:";cin>>num_a;InitList_L(La);//La表的创建input(La,num_a);//依次往单链表La里输入数据cout<<"请输入非递减单链表b的个数n:";cin>>num_b;InitList_L(Lb);//Lb表的创建input(Lb,num_b);//依次往单链表La里输入数据InitList_L(Lc);MergeList_L(La,Lb,Lc);//将单链表La和Lb进行合并cout<<"非递减单链表a,b合并后的非递减单链表c为:\n";//输出合并后的单链表Lcoutput(Lc);cout<<endl;return 0;}

0 0
原创粉丝点击