簡體   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