java排序整数链表

时间:2016-11-11 17:43:46

标签: java arrays arraylist linked-list swap

我创建了一个整数的链接列表,但我不知道如何排序它! iv尝试了很多,但总是列表中的数字消失了 这是我用于链接列表的代码!

import java.util.Random;

class Node {
Node next;
int num;

public Node(int val) {
    num = val;
    next = null;
}
}

public class LinkedList {

Node head;

public LinkedList(int val) {
    head = new Node(val);
}

public void append(int val) {
    Node tmpNode = head;
    while (tmpNode.next != null) {
        tmpNode = tmpNode.next;
    }
    tmpNode.next = new Node(val);
}

public static void main(String[] args) {
    Random rn=new Random();
    int min=0;
    int max=1000;
    LinkedList myList = new LinkedList(rn.nextInt((max - min) + 1) + min);
    for(int i=0;i<100;i++){
        int x=rn.nextInt((max - min) + 1) + min;
        myList.append(x);
    }
    myList.print();
}
}

1 个答案:

答案 0 :(得分:-1)

这一行

LinkedList myList = new LinkedList(rn.nextInt((max - min) + 1) + min);

根据the LinkedList API,似乎没有多大意义。你应该真正使用Java的LinkedLists,而不是自己滚动,这样你就可以使用List和Collection API以及Generics。

一旦你使用java.util.LinkedList你可能想调用

myList.sort();

对列表进行排序,或者为比较器提供它,如下所示:

  import java.util.Comparator;
  import java.util.LinkedList;

  Comparator<Integer> order = Integer::compare;
  myList.sort(order.reversed());

顺便说一句,鲍里斯的蜘蛛评论就在其中。这就是java 8的标准实现对LinkedLists的作用,它使列表成为一个数组,在O(n log n)中对数组进行排序,然后将每个项放在O(n)中的位置:

 default void sort(Comparator<? super E> c) { //O(n log n)
    Object[] a = this.toArray(); //O(n)
    Arrays.sort(a, (Comparator) c); //O(n log n)
    ListIterator<E> i = this.listIterator();
    for (Object e : a) { //O(n)
        i.next();      //O(1)
        i.set((E) e);  //O(1)
    }
}

顺便说一句:我没有在你的代码中看到任何“print()”方法的实现。当然它打印正确的值? 我在你的代码中没有看到任何排序方法的实现,那么我们怎么能知道排序时数字是如何丢失的呢?