在Java中,双向链表的遍历是如何工作的?
我对在双链接列表中向后遍历的理解是从某个位置向后遍历列表中的第一个节点。我用java编写了一个双链表类,并在其中编写了一个traverseBack方法 traverseBack方法的代码如下所示在Java中,双向链表的遍历是如何工作的?,java,algorithm,data-structures,Java,Algorithm,Data Structures,我对在双链接列表中向后遍历的理解是从某个位置向后遍历列表中的第一个节点。我用java编写了一个双链表类,并在其中编写了一个traverseBack方法 traverseBack方法的代码如下所示 public void traverseBack(int d){ for(Node n=first; n!=null; n=n.next){ if(n.data == d){ System.out.println("\nTraversing in Back
public void traverseBack(int d){
for(Node n=first; n!=null; n=n.next){
if(n.data == d){
System.out.println("\nTraversing in Backward Direction\n");
while(n!=null){
System.out.println(n.data);
n = n.prev;
}
return;
}
if(n.next==null){
System.out.println("Given node doesn't exist");
return;
}
}
}
代码已编译并运行,没有错误
我能问一下我对双向链表中向后遍历的理解是否正确吗?代码中是否有我做得不好的地方?这里的错误是,您似乎没有后退,而是前进。通过调用
n=n.next
在for
循环中迭代节点。你不应该打电话给n=n.prev
为什么不从最后一个元素开始,然后从那里向后循环呢?你可以这样说:
for(Node n=last; n!=null; n=n.prev){ //this is traversing backwards now.
一旦这样做了,就根本不需要while
循环 我们是否假设这是一个填充了int
的列表?d
的作用是什么?这是否表示您正在查找的节点?@tietythered
表示它开始从哪个节点返回。问题是在我的DoublyLinkedList类中,我没有定义最后一个节点,只有第一个节点。@JaneFoster我想您应该定义它。据我所知,在实现双链接列表时,将其作为字段是标准的。官方文档也建议:如果不想将其作为字段,可以通过向前迭代直到获得最后一个字段,轻松创建getLast()
方法。出于性能原因,我推荐一个字段。