2016-05-05 4 views
0

Я создал метод удаления, который удаляет объект из отдельного списка.Как удалить указанный узел из связанного списка?

Пока метод удаляет первый узел и второй узел без проблем. При удалении третьего узла и далее метод удаляет все между указанным узлом и головным узлом. Мой вопрос в том, как я могу заставить мой метод удалить указанный узел и не все до него?

Я знаю, что мне нужно сохранить ссылку на предыдущий узел, чтобы назначить следующий узел указанным узлам следующего узла. Это закроет промежуток и удалит узел. Я понимаю логику, но не могу ее реализовать.

public class List_test{ 
    public Node head; 
    public List(){ 
     head = null; 
    } 
    public List(Node head_) { 
     this.head = head_; 
     Node ref = head; 
    } 
    public void remove(Node node) { 
     Node ref= head; 
     if (ref.equals(node)) { 
      head = head.next; 
      return; 
     } 
     while (ref != null) { 
      if (ref.equals(node)) { 
       head.next = node.next; 
      } 
      ref = ref.next; 
     } 
    } 
public static void main(String[] args) { 
    new List_test(); 
} 

ответ

1

Для удаления узла, почему вы меняете указатель на голову? Вы должны использовать предыдущий узел и указать его на следующий узел узла, который нужно удалить.

+0

Я понимаю, но как я могу ссылаться на предыдущий узел? – girthquake

+0

У вас должна быть переменная, чтобы удерживать ее. Например, до начала цикла while, предыдущийNode = null, поскольку ref указывает на головку, и нет предыдущего узла. В цикле, когда вы делаете
'ref = ref.next', установите previousNode, чтобы указать, что у вас есть предыдущие узлы для каждого пройденного узла –

Смежные вопросы