您的位置:首页 > 理论基础 > 数据结构算法

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

2018-03-15 11:02 483 查看
没看到不让使用数组,就在前面用数组了,不过差不多,用链表做,方式一样;Time Limit: 1000 ms Memory Limit: 65536 KiB[align=center]Submit Statistic[/align]

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

不得使用数组!#include <stdio.h>
#include <stdlib.h>
struct node
{
int data;
struct node * next;
};
int main()
{
int a[20], b[20], M=0, N=0, m, n, i;
struct node * head, * p, * tail;
scanf("%d %d", &m, &n);
for(i = 0;i <= m - 1;i++)
{
scanf("%d", &a[i]);
}
for(i = 0;i <= n - 1;i++)
{
scanf("%d", &b[i]);
}
head = (struct node *)malloc(sizeof(struct node));
tail=head;
while(M < m && N < n)
{
if(a[M] < b
)
{
p = (struct node *)malloc(sizeof(struct node));
p -> data = a[M];
M++;
tail -> next = p;
tail = p;
p -> next = NULL;
}
else
{
p = (struct node *)malloc(sizeof(struct node));
p -> data = b
;
N++;
tail -> next = p;
tail = p;
p -> next = NULL;
}
}
if(M > m-1)
{
for(i = N; i <= n - 1; i++)
{
p = (struct node *)malloc(sizeof(struct node));
p -> data = b
;
N++;
tail -> next = p;
tail = p;
p -> next = NULL;
}
}
else
{
for(i = M; i <= m - 1; i++)
{
p = (struct node *)malloc(sizeof(struct node));
p -> data = a[M];
M++;
tail -> next = p;
tail = p;
p -> next = NULL;
}
}
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sdutoj