按升序打印自定义链接列表的元素

时间:2017-01-24 05:35:51

标签: java linked-list

在我开始采用更大的数据结构之前,我对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。

我在这里做错了什么?

2 个答案:

答案 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)

根据您的目标,您有两种选择:

  1. 对于有效的代码,请使用java.util.LinkedListjava.util.ArrayListjava.util.Collections.sort()。这些是由非常优秀的程序员编写的,并且一直被全世界数百万程序员使用。因此,您不必担心错误,并且可以开始编写有用的东西。

  2. 如果您有兴趣学习数据结构的细节,那么您似乎已经编写了自己的LinkedList类。现在您需要编写自己的sort()方法。排序是一个非常好理解的问题,并且有许多可用的在线资源可以解释不同的排序算法。这些都是很好的学习工具,因为有很多不同的优点和缺点。