2015-09-16 89 views
1

因此,我讀了幾篇關於這個主題的文章,但他們都提到迭代已經由Java實現的鏈表;例如,LinkedList<String> list = new LinkedList<String>();。然後繼續說使用for循環遍歷鏈表。但是,我試圖實現我自己的鏈表,我不知道如何遍歷它們。換句話說,我有以下代碼:迭代通過鏈接列表的實現Java

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()功能。但是,它不工作。任何人都知道如何遍歷鏈表,給定你自己的鏈表的實現?

+0

詳述_But,它不工作_ –

回答

4

變化

while(n.next != null) 

while(n != null) 

,因爲在循環中要打印當前節點n,然後將其指向它的下一個節點n = n.next;

+0

謝謝!我只需要確保我做'System.out.println(n.data)'。 –

+0

是的,你應該打印'node.data',歡迎你。 –

0

你應該檢查當前是否點頭e是null或不是,不是下一個節點。因爲你會以這種方式錯過列表的最後一個節點,所以next部分將爲null,最後一個節點不會執行循環。

您需要打印data節點的一部分。您尚未爲您的Node類定義toString方法。

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

您可以如下定義toStringNode類,然後就可以直接打印Node對象System.out聲明。

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

您應該檢查n爲空,不n.next() ::

while(n != null) 

但你有一個for循環(初始狀態,終止條件和迭代表達式)的所有方面,所以這可以更好地表示爲for循環:

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