2014-02-06 38 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()'方法,通過向前迭代直到獲得最後一個。出於性能原因,我推薦一個領域。 –