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; }