Обратный LinkedList - реализация связанного списка - PullRequest
0 голосов
/ 05 июня 2019

Это простой вопрос из LeetCode: Reverse LinkedList. У меня есть два одинаковых кода, и я не могу понять, в чем разница между двумя, но это приводит к разным результатам.

Сначала цикл пока дает правильный ответ, ноу второго неправильный ответ.Вместо temp = current.затем я просто сохраняю current в temp и в последней строке цикла while правильно переключаю current в temp.next.Я думаю, что они должны дать тот же ответ, но когда ввод {1,2,3,4,5}, тогда второе решение получило неправильный ответ {1}.

ListNode reverse = null;
ListNode current = head;

while(current != null){
  ListNode temp = current.next;
  current.next = reverse;
  reverse = current;
  current = temp;
}

Вот второй цикл while.

while(current != null){
  ListNode temp = current;
  current.next = reverse;
  reverse = current;
  current = temp.next;
}

Ответы [ 2 ]

2 голосов
/ 05 июня 2019
while(current != null){
    // This line temp is keeping the reference  of current variable
    ListNode temp = current;
    // now temp and current both pointing to same value

    // This line will make the next of current variable pointing to reverse reference
    // as current and temp were same so next of temp is also pointing to the reverse
    current.next = reverse;

    // now the reverse will be changed and point to the current reference
    reverse = current;
    // so up to here reverse, temp, current all pointing to the same location
    // as all are pointing same so temp.next,curr.next and reverse.next
    // will store the previous reference 

    // current will point back to the reverse value
    // no increment is done in the whole loop
    current = temp.next;
}
1 голос
/ 05 июня 2019

Во втором фрагменте может показаться, что current = temp.next устанавливает current в его значение next из верхней части цикла / начала или текущей итерации - в конце концов, никто не назначил что-то для temp.next.
Но после temp = current оба являются именами для одной и той же вещи, а current.next = reverse перезаписывает то, что будет необходимо и не было сохранено.

...