链表的有序集合
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 6import java.util.Scanner; public class Main { //把标准输入的一系列组成链表,重排链表结点, //把数据项有序排列,然后打印出排列序列 static Scanner scan = new Scanner(System.in); static class Node{ int val; Node next; Node(int val,Node next){ this.val = val; this.next = next; }//构造函数 } static Node create(int times){ Node a = new Node(0,null);//创建一个哑结点 for(int i=0;i<times;i++){ a.next = new Node(scan.nextInt(),a.next); } return a; } static Node sort(Node a){ Node b = new Node(0,null),x,t,u; while(a.next!=null){ t = a.next; u = t.next; a.next = u; for(x=b;x.next!=null;x=x.next){//从小到大排列 if(x.next.val>t.val){ break; } } t.next = x.next; x.next = t;//在x结点后插入t结点 } return b; } static void print(Node h){ Node x; for(x=h;x.next!=null;x=x.next){ if(x == h) System.out.print(x.next.val); else System.out.print(" "+x.next.val); } } public static void main(String[] args) { while(scan.hasNext()){ int n; n =scan.nextInt(); Node head; head = sort(create(n)); del(head); print(head); System.out.println(); } } private static void del(Node head) { // TODO Auto-generated method stub Node p1,p2,p3; p1 = head; while(p1.next != null){ p2 = p1.next; p3 = p2.next; while(p3 != null){ if(p2.val == p3.val){ p3 = p3.next; p2.next = p2.next.next; } else p3 = p3.next; } p1 = p1.next; } } }