2017-02-09 15 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;" строка работает, но удаляет узел после того, который я хочу удалить. Если я запустил его как есть, то он просто ничего не удалит.

Оператор печати показывает, что я в настоящее время работает с узлом, предшествующим найденному с помощью метода findNode (head, a), но каким-то образом что-то просто прикручивается.

ответ

3

Если вы хотите удалить узел, вам необходимо изменить поля next и previous соседних узлов.

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

, который соединит temp «с двумя соседними узлами друг с другом, минуя temp.

Тогда, вероятно, было бы целесообразно удалить ссылки temp на своих соседей, чтобы он не выглядел так, будто он все еще является частью списка.

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

Если у вас есть отдельные ссылки на head и/или tail вашего списка, вам необходимо перераспределить их в том случае, когда узел вы удалили лежал в начале или в конце списка.