数据结构实验之链表四:有序链表的归并
Description
分别输入两个有序的整数序列(分别包含M和N个数据),建立两个有序的单链表,将这两个有序单链表合并成为一个大的有序单链表,并依次输出合并后的单链表数据。
Input
第一行输入M与N的值;
第二行依次输入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 }

浙公网安备 33010602011771号