【发布时间】:2019-10-31 13:33:10
【问题描述】:
我已经通过迭代和递归解决了"reverse a linked list" 问题。结果出乎我的意料。我正在使用 leetcode,所以我的迭代版本击败了所有 python3 提交的 27.7%,而我的递归版本击败了 95.97% 的解决方案。我知道这可能是由于尾调用优化,但我不明白它是怎么回事。有人可以澄清一下吗?
这是我的两种实现代码:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
#def reverseList(self, head: ListNode) -> ListNode:
#
# prev = None
#
# while head:
# headsNext = head.next
# head.next = prev
# prev = head
# head = headsNext
#
# head = prev
#
# return head
class Solution:
def reverseList(self, head: ListNode, prev = None) -> ListNode:
if not head:
return prev
headsNext = head.next
head.next = prev
prev = head
return self.reverseList(headsNext, prev)
【问题讨论】:
-
您是否在本地对它们进行了基准测试?
-
我没有这样做
-
我会尝试这样做,看看您是否可以重现结果。另外,我认为 Python 不会进行尾调用优化。
-
做了一些研究,结果发现 Python 中没有尾调用优化,我现在试试基准测试
标签: python linked-list