OJ 合并链表(线性表)

来源:互联网 发布:海淘攻略知乎 编辑:程序博客网 时间:2024/05/04 20:52

Description

(线性表)假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。

Input

输入长度n:5
输入数据:1 2 5 6 8
输入长度m:5
输入数据:3 4 7 9 10

Output

10 9 8 7 6 5 4 3 2 1

Sample Input

47 9 10 1148 12 13 14

Sample Output

14 13 12 11 10 9 8 7 
#include<iostream>#include<cstdlib>using namespace std;typedef struct Lnode{int data;struct Lnode *next;}LinkList;void CreatList(LinkList*&L,int n)//建立 链表{LinkList *r,*s;L=(LinkList*)malloc(sizeof(LinkList));r=L;for(int i=0;i<n;i++){s=(LinkList*)malloc(sizeof(LinkList));cin>>s->data;r->next =s;r=s;}r->next=NULL;}void Display(LinkList *L)//输出{LinkList *p=L->next;while(p!=NULL){cout<<p->data<<' ';p=p->next;}}void HB(LinkList *&L1,LinkList *&L2,int n,int m)//l1和L2合并{LinkList *p1=L1;LinkList *p2=L2;while(p1->next!=NULL)//找L1的中点p1=p1->next;  p1->next=p2->next;//l1和l2结上  free(L2);//头结点删除  LinkList*p,*pre,*q;  p=L1->next->next;  L1->next->next=NULL;  while(p!=NULL)  {  q=p->next;  pre=L1;  while(pre->next!=NULL&&pre->next->data>p->data)//寻找前一个>后一个的然后两两比较  pre=pre->next;  p->next=pre->next;  pre->next=p;  p=q;  }}  int main(){LinkList *p,*q;int n,m;cin>>n;CreatList(p,n);cin>>m;CreatList(q,m);HB(p,q,n,m);Display(p);return 0;}
原创粉丝点击