2014-01-06 3 views
1

У меня есть этот метод из лекции об удалении элементов с 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, который необходимо удалить. Однако описанный выше метод работает отлично.

Для например: в приведенной ниже LinkedListenter image description here

Позволяет рассмотреть возможность удаления Node C. По вышеуказанной петле-конструкции current pointer будет указывать на Node A, а current.next будет Node B. current.next.next будет Node C. Выполнение current.next=current.next.next приведет к ошибке Node B, а не Node C.

Я думаю, что что-то не так с моим пониманием, может кто-нибудь объяснить?

ответ

1

для-петля от 0 до < индексов-1

В вашем примере, удаление C означает индекс 2. Таким образом, i относится только к 0, так как 1 не является < 1.

current начинается в A, в for петли один раз и current идет в B.

current является B, так current.next.next является D, которая эффективно удаляет C.

+0

В соответствии с этим циклом давайте рассмотрим связанный список с 10 элементами. если я хочу удалить элемент 'index 5', мой« текущий указатель »будет находиться в' index 3', но я думаю, что он должен быть в 'index 4', чтобы удалить следующий? –

+0

@ user1988876 Удаление индекса 5 (6-й элемент) означает перемещение курсора '5 - 1' раз. Затем курсор будет находиться в элементе перед удаляемым. –

+1

удалите [index 5], цикл переместится от 0 <4 [0,1,2,3] четыре раза, затем текущая точка указывает на [индекс 4], таким образом, текущий.следующий.следующий пункт [index 6], в то время как current.next = current.next.next присоединяется к [index 6] к [index 4's Tail], это правильно. – wangdq

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