我创建了一个整数的链接列表,但我不知道如何排序它! 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();
}
}
答案 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()”方法的实现。当然它打印正确的值? 我在你的代码中没有看到任何排序方法的实现,那么我们怎么能知道排序时数字是如何丢失的呢?