【问题标题】:How does traverse backward work for a Doubly Linked List in Java?Java中的双向链表如何向后遍历?
【发布时间】:2014-02-07 05:18:11
【问题描述】:

我对在双向链表中向后遍历的理解是从某个位置遍历回列表中的第一个节点。我在 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;
        }
    }
}

代码已编译并运行,没有错误。

请问我对在双向链表中向后遍历的理解是否正确?代码中有没有我做得不好的地方?

【问题讨论】:

  • 我们是否假设这是一个填充有int 的列表? d 是干什么用的?这是否代表您正在寻找的东西?
  • @tieTYT 这里d表示从哪个节点开始往回遍历。

标签: java algorithm data-structures


【解决方案1】:

这里的错误是你似乎不是在倒退,而是在前进。您通过调用n=n.nextfor 循环中迭代Nodes。你不应该打电话给n=n.prev吗?

为什么不从last 元素开始并从那里向后循环呢?你可以这样:

for(Node n=last; n!=null; n=n.prev){  //this is traversing backwards now. 

一旦你这样做了,就根本不需要while 循环。

【讨论】:

  • 问题出在我的 DoublyLinkedList 类中,我没有定义最后一个节点,只定义了第一个节点。
  • @JaneFoster 好吧,我认为您应该定义它。据我所知,在双向链表的实现中将它作为一个字段是标准的。官方文档也建议:docs.oracle.com/javase/7/docs/api/java/util/… 如果你不希望它作为一个字段,你可以通过向前迭代来轻松创建一个 getLast() 方法,直到你得到最后一个。出于性能原因,我推荐一个字段。
猜你喜欢
  • 1970-01-01
  • 2015-09-24
  • 2014-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-25
相关资源
最近更新 更多