2017-02-09 10 views
-1

リンクリストがあり、その中のデータに基づいてノードを削除したいと考えています。javaノードリンクリストを削除する

public Node deleteNode(String a){ 

    Node<String> temp = findNode(head, a); 

    temp = temp.previous; 

    System.out.println(temp.data); 

    temp = temp.getNext().getNext(); 

    return temp; 

} 

これは理論上は機能するはずのコードですが、何もしません。

「temp = temp.previous;」を削除すると、行をコードが動作しますが、削除したいノードの後に​​ノードを削除します。私はそれを実行すると、それだけで何も削除されません。

printステートメントは、現在findNode(head、a)メソッドを使用して見つかったノードの前のノードで作業していることを示していますが、なんとか何かが失敗しただけです。

答えて

3

ノードを削除する場合は、近隣ノードのnextフィールドとpreviousフィールドを変更する必要があります。 tempをバイパスし、互いにtempの二つの隣接ノードをリンクする

if (temp.next!=null) { 
    temp.next.previous = temp.previous; 
} 
if (temp.previous!=null) { 
    temp.previous.next = temp.next; 
} 

それで、tempのネイバーへの参照を削除しても、リストの一部ではないように見えるでしょう。

temp.next = null; 
temp.previous = null; 

あなたはあなたのリストのheadおよび/またはtailに別々の参照を持っている場合、あなたはあなたが削除したノードがリストの先頭や末尾に横たわっていた場合には、それらを再割り当てする必要があります。