繁体   English   中英

遍历链表Java的实现

[英]Iterating through an implementation of a Linked List Java

因此,我阅读了有关此主题的几篇文章,但它们都涉及通过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()函数是我尝试遍历链接列表的工作。 但是,它不起作用。 在您自己执行链表的情况下,有人知道如何遍历链表吗?

更改

while(n.next != null) 

while(n != null)

因为在循环内您正在打印当前节点 n ,然后通过以下方式将其指向下一个节点n = n.next;

您应该检查当前节点是否为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 +
      '}';
}

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

while(n != null)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM