leetcode 206. Обратный список (питон)

Here Вставка рисунка Описание
Решение:
Эта проблема имеет два метода, соответственно, и метод рекурсии является итеративным;

Метод а: итерационный метод:
с помощью двух указателей реализованы
два указателя , предварительно, Curr,
плюс временная переменная TEMP;

  1. не предварительно инициализированный None; Curr инициализированный голову;
  2. Затем разрешается темп = curr.next (хранится в узле, для последующего использования);
  3. curr.next = предварительно (для установления соединения между узлом и текущим узлом предшествующего ему);
  4. предварительно = CURR (вперед предварительно движения);
  5. CURR = температура (Curr движение вперед);
  6. Наконец ТОК его нет, то есть, последний предварительно обратный узел.
    Иллюстрированный следующим образом :
    первая итерация:
    Here Вставка рисунка Описание
    вторая итерация:
    Here Вставка рисунка Описание
    код выглядит следующим образом :
# 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. 先遍历到链表的末尾,
    глава = 1 ... head.next = 2
    головы = 2 ... head.next = 3
    головки = 3 ... head.next = 4
    головы = 4 ... head.next = 5
    глава = 5 ... head.next нет = None
  2. Возвращает рекурсивный
    случай , рекурсивная условие завершения, возврат, возвращение текущей головки 5, т.е. текущ = 5; head.next.next случай , в точке узла Null сопоставит с головкой, головка первой точкой перехода к нулевому точка (5) результаты.
    Как показано ниже:
    Here Вставка рисунка Описание
  3. Два рекурсивного возврата
    значения текущи 5, на этот раз для головки 4, head.next к узлу 5, поэтому head.next.next = голове , чтобы достичь следующих эффектов
    Here Вставка рисунка Описание
    для предотвращения петель, нам нужно установить 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
Опубликовано 100 оригинальных статей · вона похвала 3 · просмотров 10000 +

рекомендация

отblog.csdn.net/cy_believ/article/details/104626211
рекомендация