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