[英]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.