数据结构实验之链表六:有序链表的建立
Time Limit: 1000MS
Memory Limit: 65536KB
Problem Description
输入N个无序的整数,建立一个有序链表,链表中的结点按照数值非降序排列,输出该有序链表。
Input
第一行输入整数个数N;
第二行输入N个无序的整数。
第二行输入N个无序的整数。
Output
依次输出有序链表的结点值。
Example Input
6 33 6 22 9 44 5
Example Output
5 6 9 22 33 44
Hint
不得使用数组!
#include <bits/stdc++.h>
using namespace std;
typedef struct node
{
int date;
struct node *next;
}Lnode;
Lnode *creat(int n)//建表 排序
{
Lnode *head, *p, *q, *r;
head = new node;
head ->next = NULL;
p = new node;
p ->next = NULL;
cin >> p->date;
head -> next = p; //输入首元素用于后面元素的判断
for(int i = 1; i < n; i++)
{
bool flag = 1;
p = new node;
p ->next = NULL;
r = head;
q = head->next;
cin >> p ->date;
while(q->next) //除最后一个外,判值
{
if(p->date <= q -> date)
{
r -> next = p;
p -> next = q;
flag = 0;break;
}
else
{
r = r -> next;
q = q -> next;
}
}
if(flag) //对最后一个判断
{
if(p->date>=q->date)
{
q -> next = p;
}
else
{
r -> next = p;
p -> next = q;
}
}
}
return head;
}
void output(Lnode *head)//输出
{
Lnode *q;
cout << head -> next -> date;
q = head->next;
while(q->next)
{
q = q->next;
cout << " " << q->date;
}
cout << endl;
}
int main()
{
int n;
Lnode *head;
cin >> n;
head = creat(n);//建表 排序
output(head);
return 0;
}