Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,双向链表的遍历是如何工作的?_Java_Algorithm_Data Structures - Fatal编程技术网

在Java中,双向链表的遍历是如何工作的?

在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

我对在双链接列表中向后遍历的理解是从某个位置向后遍历列表中的第一个节点。我用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 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
的作用是什么?这是否表示您正在查找的节点?@tietythere
d
表示它开始从哪个节点返回。问题是在我的DoublyLinkedList类中,我没有定义最后一个节点,只有第一个节点。@JaneFoster我想您应该定义它。据我所知,在实现双链接列表时,将其作为字段是标准的。官方文档也建议:如果不想将其作为字段,可以通过向前迭代直到获得最后一个字段,轻松创建
getLast()
方法。出于性能原因,我推荐一个字段。