所以我读了几篇关于这个主题的文章,但它们都是指通过一个已经由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 +
'}';
}