数据结构实验之链表四:有序链表的归并
Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem 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
Sample Output
1 14 21 23 26 28 45 50 66 99 100
Hint
不得使用数组!
Source
#include <stdio.h> #include <stdlib.h> struct node { int data; struct node *next; }; int main () { int n, m,i; struct node *head, *w, * p, *q, *head1, *tail; head = (struct node *)malloc(sizeof (struct node )); head ->next = NULL; w = head ; scanf("%d %d", &m, &n); for (i = 0 ; i < m ; i++) { q = (struct node *)malloc(sizeof (struct node) ); scanf("%d", &q->data); w ->next = q; q ->next = NULL; w = q; } head1 = (struct node *)malloc(sizeof (struct node )); head1 ->next = NULL; p = head1; for (i = 0 ; i < n ; i++) { q = (struct node *)malloc(sizeof (struct node )); scanf("%d", &q->data); p ->next = q; q ->next = NULL; p = q; } w = head ->next; q = head1->next; tail = head; head -> next = NULL; free(head1); while(w && q ) { if (w ->data < q ->data) { tail ->next = w; tail = w; w = w ->next; tail ->next = NULL; } else { tail ->next = q; tail = q; q = q -> next; tail ->next = NULL; } } if (w != NULL) { tail ->next = w; } else { tail ->next = q; } p = head ->next; while(p != NULL) { if (p ->next != NULL) { printf("%d ", p->data); } else { printf("%d\n", p->data); } p = p ->next; } return 0; }