数据结构实验之链表四:有序链表的归并

Description

分别输入两个有序的整数序列(分别包含M和N个数据),建立两个有序的单链表,将这两个有序单链表合并成为一个大的有序单链表,并依次输出合并后的单链表数据。

Input

第一行输入M与N的值;
第二行依次输入M个有序的整数;
第三行依次输入N个有序的整数。

Output

输出合并后的单链表所包含的M+N个有序的整数。

Sample

Input 

6 5
1 23 26 45 66 99
14 21 28 50 100

Output 

1 14 21 23 26 28 45 50 66 99 100
 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 
 4 typedef struct node
 5 {
 6     int data;
 7     struct node *next;
 8 } set;
 9 
10 set *creat(set *tail)
11 {
12     set *p = (set*)malloc(sizeof(set));
13     p->next = NULL;
14     tail->next = p;
15     return p;
16 }
17 void fun(set *head1, set *head2)//归并函数
18 {
19     set *p,*q,*t;
20     p = head1;
21     q = head1->next;
22     t = head2->next;
23     while(t)//判断第二个链表里面还有没有元素
24     {
25         while(q!=NULL&&q->data < t->data)//一定要先q!=NULL,否则就没有q->data
26         {
27             q = q->next;
28             p = p->next;
29         }
30         p->next = t;
31         head2->next = t->next;
32         t->next = q;
33         q = t;
34         t = head2->next;//重新连接好两个链表
35     }
36 }
37 void Printf(set *head)
38 {
39     set *p = head->next;
40     while(p)
41     {
42         if(p->next == NULL)
43             printf("%d\n",p->data);
44         else
45             printf("%d ",p->data);
46         p = p->next;
47     }
48 }
49 int main()
50 {
51     int m,n;
52     scanf("%d%d",&m,&n);
53     int i;
54     set *head1 = (set *)malloc( sizeof(set));
55     head1->next = NULL;
56     set *head2 = (set *)malloc( sizeof(set));
57     head2->next = NULL;
58     set *tail1 = head1;
59     set *tail2 = head2;
60     for(i=0; i<m; i++)
61     {
62         set *p = creat(tail1);
63         scanf("%d",&p->data);
64         tail1 = p;
65     }
66     for(i=0; i<n; i++)
67     {
68         set *p = creat(tail2);
69         scanf("%d",&p->data);
70         tail2 = p;
71     }
72     fun(head1,head2);
73     Printf(head1);
74     return 0;
75 }

 

posted @ 2020-06-07 12:54  爱写程序的机械师  阅读(86)  评论(0)    收藏  举报