通过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;

将其指向下一个节点

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

while(n != null)

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

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

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

相关内容

  • 没有找到相关文章

最新更新