链表的有序集合
Time Limit: 1000MS
Memory Limit: 65536KB
Problem Description
集合有一个重要的特性:互异性,即集合中任意两个元素都是不同的,互异性使得集合中的元素没有重复。给你 n 个包含重复数字的无序正整数序列,建立一个有序链表,链表中的结点按照数值非降序排列且不包含重复元素,输出该有序链表。
Input
输入包含多组测试数据,对于每组测试数据:
输入的第一行为一个正整数 n(1 ≤ n ≤ 100),
第二行为 n 个正整数 b1,b2,...,bn(0 ≤ bi ≤ 230)。
Output
对于每组测试数据,按照非降序输出链表的节点值。
Example Input
1 2 2 1 1 6 6 3 5 2 2 3
Example Output
2 1 2 3 5 6
Hint
Author
qinchuan
#include<iostream>
#include<stdio.h>
using namespace std;
struct Lnode
{
int data;
Lnode * next;
};
Lnode * compare(Lnode * head, int a)
{
Lnode * tail,* L;
tail=head;
L=new Lnode;
L->data=a;
L->next=NULL;
while(head)
{
if(head->next->data==a)
{
break;
}
else if(head->next==NULL)
{
head->next=L;
break;
}
else if(a<head->next->data)
{
L->next=head->next;
head->next=L;
break;
}
head=head->next;
}
return tail;
}
int main()
{
int n,a;
while(scanf("%d",&n)!=EOF)
{
Lnode * head, * L;
head=new Lnode;
head->next=NULL;
scanf("%d",&a);
L=new Lnode;
L->data=a;
L->next=NULL;
head->next=L;
n--;
while(n--)
{
scanf("%d",&a);
head=compare(head,a);
}
head=head->next;
while(head->next)
{
printf("%d ",head->data);
head=head->next;
}
printf("%d\n",head->data);
}
}