Решение:
Эта проблема имеет два метода, соответственно, и метод рекурсии является итеративным;
Метод а: итерационный метод:
с помощью двух указателей реализованы
два указателя , предварительно, Curr,
плюс временная переменная TEMP;
- не предварительно инициализированный None; Curr инициализированный голову;
- Затем разрешается темп = curr.next (хранится в узле, для последующего использования);
- curr.next = предварительно (для установления соединения между узлом и текущим узлом предшествующего ему);
- предварительно = CURR (вперед предварительно движения);
- CURR = температура (Curr движение вперед);
- Наконец ТОК его нет, то есть, последний предварительно обратный узел.
Иллюстрированный следующим образом :
первая итерация:
вторая итерация:
код выглядит следующим образом :
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def reverseList(self, head):
pre = ListNode(None)
curr = head
tmp = ListNode(None)
while curr:
tmp = curr.next
curr.next = pre
pre = curr
curr = tmp
return pre
Метод два: рекурсия
(Легче понять в сочетании с кодовой точкой зрения)
для данного списка, в первую очередь необходимо пройти список до конца, например, [1,2,3,4,5], и , наконец , возвращается к рекурсивному обходу 5;
то есть, ток голова 5, head.next , как None, head.next.next Ни одно из узловых точек, head.next.next назначенного узла 5 (head.next.next = голове), чтобы достичь направлении , противоположном направлению к списку к соединению, а затем рекурсивно возвращается; текущ возвращается через 5, становится глава 4, то head.next = 5, head.next.next 5 представляет собой указатель на узел узла; таким образом , мы head.next .next назначена голова, пункт 5 достигается фиксация переход обратный к точке соединения 4.
Рекурсивный процедура заключается в следующем:
не l-> 2-> 3-> 4-> 5-> None
- 先遍历到链表的末尾,
глава = 1 ... head.next = 2
головы = 2 ... head.next = 3
головки = 3 ... head.next = 4
головы = 4 ... head.next = 5
глава = 5 ... head.next нет = None - Возвращает рекурсивный
случай , рекурсивная условие завершения, возврат, возвращение текущей головки 5, т.е. текущ = 5; head.next.next случай , в точке узла Null сопоставит с головкой, головка первой точкой перехода к нулевому точка (5) результаты.
Как показано ниже:
- Два рекурсивного возврата
значения текущи 5, на этот раз для головки 4, head.next к узлу 5, поэтому head.next.next = голове , чтобы достичь следующих эффектов
для предотвращения петель, нам нужно установить head.next не = None ,
Рекурсивное возвращение обратно на первичном, и, наконец, к голове.
Код выглядит следующим образом:
class Solution:
def reverseList(self, head):
if head == None or head.next == None:
return head
cur = reverseList(head.next)
head.next.next = head
head.next = None
return cur