数据结构实验之链表六:有序链表的建立
Time Limit: 1000MS Memory limit: 65536K
题目描述
输入N个无序的整数,建立一个有序链表,链表中的结点按照数值非降序排列,输出该有序链表。
输入
第一行输入整数个数N;
第二行输入N个无序的整数。
输出
依次输出有序链表的结点值。
示例输入
6
33 6 22 9 44 5
示例输出
5 6 9 22 33 44
Time Limit: 1000MS Memory limit: 65536K
题目描述
输入N个无序的整数,建立一个有序链表,链表中的结点按照数值非降序排列,输出该有序链表。
输入
第一行输入整数个数N;
第二行输入N个无序的整数。
输出
依次输出有序链表的结点值。
示例输入
6
33 6 22 9 44 5
示例输出
5 6 9 22 33 44
# include <stdio.h>
# include <stdlib.h>
typedef struct node{
int data;
struct node *next;
} Node;
Node *create_ordered_list(int num);
void display_link_list(Node*L);
int main()
{
int n;
Node*L;
scanf("%d",&n);
L = create_ordered_list(n);
display_link_list(L);
return 0;
}
Node* create_ordered_list(int num)
{
int key;
Node*head,*p;
/*compare用来找到比key大的元素,trace用来追踪compare的前驱*/
Node*compare,*trace;
head = (Node*)malloc(sizeof(Node));
head->next = NULL;
while(num--)
{
scanf("%d",&key);
p = (Node*)malloc(sizeof(Node));
p->data = key;
p->next = NULL;
compare = head->next;
trace = head;
/*找到compare,确定前驱trace*/
while( compare && compare->data < key )
{
trace = compare;
compare = compare->next;
}
/*将p连接到链表上*/
trace->next = p;
p->next = compare;
}
return head;
}
void display_link_list(Node*L)
{
Node*p;
p = L->next;
while(p)
{
printf("%d ",p->data);
p = p->next;
}
}