для удаления узла по любому индексу я не могу понять последнюю строку кода "temp.next = t;" - PullRequest
0 голосов
/ 04 апреля 2020

`stati c class Node {E data; Узел следующий;

    public Node(E data) {
        this.data = data;
        next = null;
    }
}
        public void deleteAtIndex(int index){     
        Node temp = head;
        for (int i = 1; i < index-1 ; i++) {
            temp=temp.next;
        }
        Node t = temp.next.next;
        temp.next = t;
       }`  

зачем писать этот код в java, потому что было упомянуто, что мы используем "temp.next = t;" «Отключить удаленный узел от списка». Если при удалении последней строки код не выдает требуемого вывода.

Ответы [ 2 ]

3 голосов
/ 04 апреля 2020

Позвольте мне привести вам пример -

Рассмотрим 5-> 6-> 10-> 15. Допустим, вы хотите удалить 10.

По логике вы хотите найти 6 и указать на него 15.

Первый шаг для этого потребует от вас получить узел, который указывает на ваш объект (тот, который мы хотим удалить)

 for (int i = 1; i < index-1 ; i++) {
            temp=temp.next;
 }

Здесь для l oop мы просто находим узел, который указывает на объект, который мы хотим удалить.


    Node t = temp.next.next;   //15
    temp.next = t; // Point 6 to 15

Мы устанавливаем следующий узел "6", чтобы быть следующим узлом объекта, который мы хотим удалить. Почему? Потому что мы хотим, чтобы это было: 5-> 6-> 15

Ваш параметр t содержит узел со значением "15".

Temp равен "6".

Temp.next до изменения, равного 10. После изменения оно будет указывать на 15.

0 голосов
/ 04 апреля 2020

С помощью temp.next = next вы обновляете ссылку на следующий узел, удалив старый. Вы также можете видеть, что в реализации LinkedList: # unlink (Node)

...