2011-12-15 16 views
0

ここにリンクされたリストのコード二重リンクリストからノードを削除しますか?

​​

、問題は、私はprevious.setNext(null)を使用するとことである問題

public DNode removeDnode(DNode current) 
{ 
    if(current.nextNode() == null) 
    { 
     DNode previous = current.prevNode(); 
     previous.setNext(null); 
     current.setPrev(null); 
    } 
    else if (current.prevNode() == null) 
    { 
     DNode next = current.nextNode(); 
     next.setPrev(null); 
     current.setNext(null); 
    } 
    else 
    { 
     DNode next = current.nextNode(); 
     DNode previous = current.prevNode(); 
     previous.setNext(next); 
     next.setPrev(previous); 
     current.setPrev(null); 
     current.setNext(null); 
    } 
    size = size - 1; 
    return current; 
} 

のremoveノード方法です。それは私がそれがヘッダとテールと何か関係があると思うノードを再び追加させません。

ただし、私はprevious.setNext(tail)を使用します。それをリストから削除するようなことはありませんか?

+0

宿題のように見えます。 –

+0

'remove'メソッドの最初の2つの' if'ブロックは、ヘッダー/テールを持たないLinkedListのものです。ヘッダーとテールがあるという点は、リスト内のすべてのノードを同じように扱うことができることです。 – corsiKa

+0

質問を投稿しない – PTBG

答えて

1

tailを削除すると、問題が発生します。だから私はあなたがtailに完了したら、あなたは簡単にそれを修正します信じている - しかしあなたはnextと同じ問題を抱えている

DNode previous = current.prevNode(); 
    previous.setNext(null); 
    current.setPrev(null); 
    tail = previous; 

を試してみてください。二重リンクリストから削除取り扱い

2

最後の要素を削除するときに、リストの末尾が前の要素を指すのを忘れていませんか?

if(current.nextNode() == null) { 
    DNode previous = current.prevNode(); 
    previous.setNext(null); 
    current.setPrev(null); 
    tail = previous; //isn't this missing?! 
} 
0

VERYトリッキーです。テスト中にバグが表示された場合は、「クイックフィックス」だけではなく、動作しなかった理由を正確に理解し、意図した修正がどのように変更されるかを理解してください。すべてビヘイビアー現在誤動作している。

慎重に考えると、問題を最小限に抑えて動作させることができます。あなたが慎重に考えないと、何時間もあなたの尻尾を追いかけるでしょう。

関連する問題