2014-02-06 39 views
0

我对双向链表中向后遍历的理解是从某个位置返回到列表中的第一个节点。我已经在java中编写了一个双链表类,并在其中包含了一个traverseBack方法。如何遍历Java中双向链表的向后工作?

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; 
     } 
    } 
} 

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

请问我对双向链表中的向后遍历的理解是否正确?代码中有什么我没有做好的?

+0

我们是否假设这是一个用'int'填充的列表?什么是'd'?这是否代表你在找什么? –

+0

@tieTY这里'd'表示它从哪个节点开始回溯。 –

回答

2

这里的错误是你似乎没有倒退,你会前进。您正在通过调用n=n.next迭代您的for循环中的Node。你不应该打电话给n=n.prev吗?

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

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

一旦你做到了这一点,没有必要为while循环可言。

+0

问题出在我的DoublyLinkedList类中,我没有定义最后一个节点,而只是第一个节点。 –

+0

@JaneFoster嗯,我认为你应该定义这一点。据我所知,将它作为实现双向链表的字段是标准的。官方文档也建议:http://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html#getLast()如果你不希望它作为一个字段,你可以轻松创建一个'getLast()'方法,通过向前迭代直到获得最后一个。出于性能原因,我推荐一个领域。 –