【问题标题】:Iterating through an implementation of a Linked List Java遍历链表 Java 的实现
【发布时间】:2015-09-16 03:43:32
【问题描述】:

所以我阅读了几篇关于这个主题的帖子,但它们都指的是迭代一个已经由 Java 实现的链表;例如,LinkedList<String> list = new LinkedList<String>();。然后继续说使用 for 循环遍历链表。但是,我正在尝试实现我自己的链表,但我不确定如何遍历它们。换句话说,我有以下代码:

class Node {
    private Node next = null; 
    private int data; 

    public Node(int d) {
        data = d; 
    }

    void appendToTail(int d) {
        Node end = new Node(d); 
        Node n = this; 
        while(n.next != null) {
            n = n.next; 
        }
        n.next = end; 
    }

    void print() {
        Node n = this; 
        while(n.next != null) {
            System.out.println(n); 
            n = n.next; 
        }
    }

    public static void main(String [] args) {
        Node x = new Node(4); 
        x.appendToTail(5); 
        x.print(); 
    }   
}

我编写的print() 函数是我尝试遍历链表的努力。但是,它不起作用。鉴于您自己的链表实现,有人知道如何遍历链表吗?

【问题讨论】:

  • 详细说明 但是,它不起作用

标签: java list linked-list nodes


【解决方案1】:

改变

while(n.next != null) 

while(n != null)

因为在循环内部,您正在打印当前 节点 n,然后通过:n = n.next;

将其指向下一个 节点

【讨论】:

  • 谢谢!我还必须确保我做到了System.out.println(n.data)
  • 是的,你应该打印node.data,不客气。
【解决方案2】:

您应该检查n 是否为空,而不是n.next()::

while(n != null)

但是您拥有for 循环的所有方面(初始状态、终止条件和迭代表达式),因此可以更好地表示为for 循环:

for (Node n = this; n != null; n = n.next)
    System.out.println(n.data);

【讨论】:

    【解决方案3】:

    您应该检查当前节点是否为null,而不是下一个节点。因为这样你会错过列表的最后一个节点,next 部分将是null 用于最后一个节点并且不会执行循环。

    您需要打印data 部分节点。您尚未为 Node 类定义 toString 方法。

    void print() {
      Node n = this;
      while(n != null) {
        System.out.println(n.data);
        n = n.next;
      }
    }
    

    您可以为您的Node 类定义如下toString,然后您可以直接在System.out 语句中打印Node 对象。

    @Override
    public String toString() {
      return "Node{" +
          ", data=" + data +
          '}';
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多