Подход к обращению связанного списка в Python - PullRequest
0 голосов
/ 13 декабря 2018

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

def reverse(self):
   temp  = curr = self.head         #curr refers to the next node
   prev = None
   while temp:
          curr = temp.next    #curr goes to the next node of temp           
          curr.next = temp    #curr node points to its previous node temp
          prev = temp         #prev moves to the next node
          temp = curr
   #self.head.next = None 
   self.head = prev

1 Ответ

0 голосов
/ 13 декабря 2018

В вашем методе есть логическая ошибка.

В конце первого прохода цикла while:

  • curr (2-й элемент в списке)
  • curr.next (1-й элемент в списке)
  • temp = curr = (2-й элемент в списке)

Во втором проходе цикла while,Вы ожидаете достичь 3-го элемента, используя temp.next.Это неправильно, потому что:

  • temp.next = curr.next = (1-й элемент в списке)

Оставляя вам бесконечный цикл междупервый и второй элемент без условия выхода.

Я оставлю вас, чтобы найти правильное решение для этого.

(Подсказка: температура должна быть назначена элементу ??? в 1-м проходе)

...