在我开始采用更大的数据结构之前,我对Java相对较新,并试图在我的空闲时间学习。今晚全部关于链接列表。我有一个LinkedList并试图按升序排列列表。假设我们有5号,4号,6号,9号,1号。
你怎么写一个方法 - 实际上把它变成1,4,5,6,9?
现在,我正在努力做到这一点,我所拥有的只是:
public void order (LinkedList head) {
if (head == null)
return;
else {
order(head.next);
System.out.print(" " + head.data);
return;
而不是升序,而是打印出原始链表的反面:1,9,6,4,5。
我在这里做错了什么?
答案 0 :(得分:3)
如果LinkedList
是您自己定义的类,则
1)编写自己的排序方法以执行排序或
2)让您的Node
班级从LinkedList
组成Comparable
来实施ArrayList
。创建Collections.sort(yourNewArrayList)
并将节点添加到其中。之后,您可以使用public class Node implements Comparable<Node>{
private int value;
//constructor, getters and other members not shown
@Override
public int compareTo(Node n){
return this.getValue() - n.getValue();
}
}
ArrayList list<Node> = new ArrayList<Node>();
while(linkedList.hasNext()){
list.add(linkedList.next());
}
Collections.sort(list);
对其进行排序。
你会有类似的东西:
(*health1)++;
值得注意的是,Java实现的排序使用了Dual-Pivot Quicksort,它可以提供O(n(log n)性能。
答案 1 :(得分:0)
根据您的目标,您有两种选择:
对于有效的代码,请使用java.util.LinkedList
或java.util.ArrayList
和java.util.Collections.sort()
。这些是由非常优秀的程序员编写的,并且一直被全世界数百万程序员使用。因此,您不必担心错误,并且可以开始编写有用的东西。
如果您有兴趣学习数据结构的细节,那么您似乎已经编写了自己的LinkedList
类。现在您需要编写自己的sort()
方法。排序是一个非常好理解的问题,并且有许多可用的在线资源可以解释不同的排序算法。这些都是很好的学习工具,因为有很多不同的优点和缺点。