У меня есть этот метод из лекции об удалении элементов с linkedList
по адресу specified index
. Я понимаю, как работает метод, но я не понимаю, почему for-loop
оставляет current node pointer
два индекса перед желаемым индексом.Удалить метод для реализации связанныхList в Java
Вот метод:
public void remove(int index) {
if (index == 0) {
// removing the first element must be handled specially
front = front.next;
} else {
// removing some element further down in the list;
// traverse to the node before the one we want to remove
ListNode current = front;
for (int i = 0; i < index - 1; i++) {
current = current.next;
}
// change its next pointer to skip past the offending node
current.next = current.next.next;
}
}
for-loop
идет от 0 to < index-1
, в то время как я думал, что это должно идти от 0 to < index
. Таким образом, указатель находится на одном index
перед index
, который необходимо удалить. Однако описанный выше метод работает отлично.
Для например: в приведенной ниже LinkedList
Позволяет рассмотреть возможность удаления Node C
. По вышеуказанной петле-конструкции current pointer
будет указывать на Node A
, а current.next
будет Node B
. current.next.next
будет Node C
. Выполнение current.next=current.next.next
приведет к ошибке Node B
, а не Node C
.
Я думаю, что что-то не так с моим пониманием, может кто-нибудь объяснить?
В соответствии с этим циклом давайте рассмотрим связанный список с 10 элементами. если я хочу удалить элемент 'index 5', мой« текущий указатель »будет находиться в' index 3', но я думаю, что он должен быть в 'index 4', чтобы удалить следующий? –
@ user1988876 Удаление индекса 5 (6-й элемент) означает перемещение курсора '5 - 1' раз. Затем курсор будет находиться в элементе перед удаляемым. –
удалите [index 5], цикл переместится от 0 <4 [0,1,2,3] четыре раза, затем текущая точка указывает на [индекс 4], таким образом, текущий.следующий.следующий пункт [index 6], в то время как current.next = current.next.next присоединяется к [index 6] к [index 4's Tail], это правильно. – wangdq