有序单链表的合并

来源:互联网 发布:日语原版小说软件 编辑:程序博客网 时间:2024/06/07 16:39
#include <iostream>using namespace std;//结点的定义typedef struct LNode{int data;LNode *next;}LNode,*LinkList;//获取数据int getdata(LinkList &l,int location){LinkList p=l->next;int j=1;while (p&&j<location){p=p->next;j++;}if (!p||j>location){cout<<"错误!"<<endl;return -1;}return p->data;}//创建单链表LinkList CreateLinkList(int n){LinkList List,p,r;                        //p为用来指向最后插入的那个结点的辅助指针List=new LNode;                            //为链表list建立一个头结点List->next=NULL;                          //初始化List链表,使其指针域为空int value;for (int i=1;i<=n;i++){r=new LNode;                         //为当前插入的结点创建空间cout<<"输入第"<<i<<"个元素的数据:";cin>>value;r->data=value;r->next=NULL;if (List->next==NULL){List->next=r;}else{p->next=r;}p=r;                //让p指向最后插入的新结点}return List;}//单链表的合并LinkList MergeList(LinkList &La,LinkList &Lb)       //La和Lb是A,B链表的头指针{LinkList pa,pb,pc,Lc;Lc=new LNode;pa=La->next;      //使pa指向La的当前待比较插入的结点(第一个)pb=Lb->next;pc=La;            //使La的头结点作为Lc的头结点Lc=La;while (pa&&pb){if (pa->data>=pb->data){pc->next=pb;pc=pb;pb=pb->next;}else{pc->next=pa;pc=pa;pa=pa->next;}pc->next=pa? pa:pb;            //当A或B链表其中一个为空时,将剩下的全部放到C链表}return Lc;}void main(){LinkList list1=new LNode;LinkList list2=new LNode;LinkList list3;int lengtha;cout<<"A链表的长度是:";cin>>lengtha;/*cout<<endl;*/cout<<"输入A链表的数据元素:"<<endl;list1=CreateLinkList(lengtha);cout<<endl;int lengthb;cout<<"B链表的长度是:";cin>>lengthb;/*cout<<endl;*/cout<<"输入B链表的数据元素:"<<endl;list2=CreateLinkList(lengthb);cout<<endl;list3=MergeList(list1,list2);cout<<"合并后的单链表是:";for (int i=1;i<=lengtha+lengthb;i++){cout<<getdata(list3,i)<<" ";}}

0 0
原创粉丝点击