试题描述
输入无序的元素,分别建立两个有3个结点的逆序单链表(有头结点)(显示排序后的链表),合并两个单链表使之仍然有序,显示合并后的单链表。
样例输入
4 6 8
5 7 9样例输出
8 6 4
9 7 5
9 8 7 6 5 4语言
COJ提交结果
KLP平台编译运行通过,答案正确。
源代码
#include<stdio.h>
#include<malloc.h>
typedef struct node
{
int data;
struct node *next;
}NODE;
int main()
{
//输入两个3结点链表
int n = 3;
NODE *head1, *head2, *p1, *p2, *p;
//输入
head1 = (NODE *)malloc(sizeof(NODE));
p = head1;
while(n --)
{
p1 = (NODE*)malloc(sizeof(NODE));
scanf("%d",&p1->data);
p->next = p1;
p = p1;
}//p和p1在末尾,头结点为空
p->next = NULL;
//排序
n = 3;
int t;
p = head1->next;
while(n --)
{
p = head1->next;
while(p->next != NULL)
{
if(p->data < p->next->data)
{
t = p->data;
p->data = p->next->data;
p->next->data = t;
}
p = p->next;
}
}
//输出
p = head1->next;
while(p != NULL)
{
if(p->next == NULL)
{
printf("%d",p->data);
p = p->next;
}
else
{
printf("%d ",p->data);
p = p->next;
}
}
printf("\n");
//输入
n = 3;
head2 = (NODE *)malloc(sizeof(NODE));
p = head2;
while(n --)
{
p2 = (NODE*)malloc(sizeof(NODE));
scanf("%d",&p2->data);
p->next = p2;
p = p2;
}//p和p2在末尾,头结点为空
p->next = NULL;
//排序
n = 3;
p = head2->next;
while(n --)
{
p = head2->next;
while(p->next != NULL)
{
if(p->data < p->next->data)
{
t = p->data;
p->data = p->next->data;
p->next->data = t;
}
p = p->next;
}
}
//输出
p = head2->next;
while(p != NULL)
{
if(p->next == NULL)
{
printf("%d",p->data);
p = p->next;
}
else
{
printf("%d ",p->data);
p = p->next;
}
}
printf("\n");
//链接两个链表
p = head1->next;
while(p->next != NULL)
{
p = p->next;
}
p->next = head2->next;
//排序
n = 6;
p = head1->next;
while(n --)
{
p = head1->next;
while(p->next != NULL)
{
if(p->data < p->next->data)
{
t = p->data;
p->data = p->next->data;
p->next->data = t;
}
p = p->next;
}
}
//输出
p = head1->next;
while(p != NULL)
{
if(p->next == NULL)
{
printf("%d",p->data);
p = p->next;
}
else
{
printf("%d ",p->data);
p = p->next;
}
}
printf("\n");
return 0;
}
该程序使用C语言实现,首先创建并排序两个各有3个结点的逆序单链表,然后将这两个链表合并成一个新的有序链表。输入数据经过处理后,按顺序输出排序合并后的链表元素。

被折叠的 条评论
为什么被折叠?



