标签:
【问题描述】
1、建立两个有序的单链表,表中元素的数据类型自己指定;
2、将建立的两个链表合并为一个新的有序的单链表;
3、输出显示已合并好的有序的单链表。
【输入形式】输入表1的元素个数,表1的元素值(逆序),同表1,输入表2的数据。
【输出形式】输出合并后的元素值。
【样例输入】
3 //表1元素个数
22 21 19 //表1的元素值(逆序)
4 //表2元素个数
92 91 31 29 //表2的元素值(逆序)
【样例输出】
The current List is:
19,21,22,29,31,91,92
思路分析:将两个链表的值比较然后,较大者的节点用逆向建立单链表法链入。
代码如下:
#include <stdio.h> #include <stdlib.h> typedef struct node { int data; struct node *next; }LNode; LNode *CreateLinkList() { LNode *head,*p,*q; int i,n; head=(LNode*)malloc(sizeof(LNode)); head->next=NULL; p=head; q=p; scanf("%d",&n); for(i=1;i<=n;i++) { p=(LNode*)malloc(sizeof(LNode)); scanf("%d",&p->data); p->next=NULL; q->next=p; q=p; } return head; } void Merge(LNode *La,LNode *Lb,LNode **Lc) { LNode *p,*q,*s; p=La->next; q=Lb->next; *Lc=La; (*Lc)->next=NULL; free(Lb); while(p!=NULL&&q!=NULL) { if(p->data>q->data) { s=p; p=p->next; } else { s=q; q=q->next; } s->next=(*Lc)->next; (*Lc)->next=s; } if(p==NULL) p=q; while(p!=NULL) { s=p; p=p->next; s->next=(*Lc)->next; (*Lc)->next=s; } } void print(LNode *p) { int first=1; p=p->next; while(p!=NULL) { if(first) first=0; else printf(","); printf("%d",p->data); p=p->next; } printf("\n"); } int main() { LNode *La,*Lb,*Lc; La=CreateLinkList(); Lb=CreateLinkList(); Merge(La,Lb,&Lc); printf(" The current List is:\n"); print(Lc); }
标签:
原文地址:http://www.cnblogs.com/misamisa/p/5962107.html