#python
#python
Вопрос:
Я пытаюсь решить проблему алгоритма в LeetCode (https://leetcode.com/problems/reverse-linked-list /).
Я создал функцию recursiveList для решения этой проблемы путем рекурсии и ввел переменную newHead в качестве параметра.
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def recursiveList(self, head, newHead):
if head.next == None:
return ListNode(head.val)
newHead.next = self.recursiveList(head.next, newHead)
newHead = newHead.next
return ListNode(head.val)
def reverseList(self, head: ListNode) -> ListNode:
if head == None:
return None
newHead = ListNode()
resultHead = ListNode(0, newHead)
newHead.next = self.recursiveList(head, newHead)
return resultHead.next
Результат
Your input
[1,2,3,4,5]
Output
[0,1]
Expected
[5,4,3,2,1]
Я обнаружил, что когда функция recursiveList возвращает значение ListNode, новый заголовок сбрасывается. Другими словами newHead = newHead.next
, не работает, когда recursiveList возвращает значение.
ниже почему ListNode{val: 5, next: None}
обращается к ListNode{val: 0, next: ListNode{val: 5, next: None}}
after return?
Извините за мой плохой английский. На всякий случай, если я не могу отвечать на комментарии, заранее благодарю вас!!!
Node = self.recursiveList(head.next, newHead)
print("newHead first : %s" % newHead)
newHead.next = Node
newHead = newHead.next
print("newHead second : %s" % newHead)
print("return!")
return ListNode(head.val)
Результат
newHead first : ListNode{val: 0, next: None}
newHead second : ListNode{val: 5, next: None}
return!
newHead first : ListNode{val: 0, next: ListNode{val: 5, next: None}}
newHead second : ListNode{val: 4, next: None}
return!
newHead first : ListNode{val: 0, next: ListNode{val: 4, next: None}}
newHead second : ListNode{val: 3, next: None}
return!
newHead first : ListNode{val: 0, next: ListNode{val: 3, next: None}}
newHead second : ListNode{val: 2, next: None}
return!
Комментарии:
1. «ниже почему ListNode{val: 5, next: None} превращается в ListNode{val: 0, next: ListNode{val: 5, next: None}} после возврата?» Ну,
ListNode{val: 5, next: None}
это результат при печатиnewHead
, но вы не возвращаетеnewHead
, а вместоListNode(head.val)
этого . Так почему они должны быть одинаковыми?2. Ну, я думаю, что функции python работают по вызову по ссылке, когда я помещаю объект класса в качестве параметра функции. Я ошибаюсь? На самом деле я никогда не возвращался
newHead
, ноnewHead
изменился. почему это происходит?3. Пожалуйста, прочитайте nedbatchelder.com/text/names1.html