【发布时间】:2021-06-11 07:10:45
【问题描述】:
我找到了一个递归解决方案来检查一个链表是否是回文:
def isPalindrome(self, head: ListNode) -> bool:
self.front_pointer = head
def recursively_check(head):
if head:
if not recursively_check(head.next):
return False
if self.front_pointer.val != head.val:
return False
self.front_pointer = self.front_pointer.next
return True
return recursively_check(head)
'if head' 声明之后:
当“recursively_check(head.next)”指向 None 时,为什么我们在第一个 if 语句中返回 False?这样就好了,不是吗?因为它只是意味着我们已经到达链表的末尾,还是我读错了?
对于第二个 if 语句,这种说法是有道理的——在我看来,这是检查第一个节点 front_pointer 和最后一个节点 head 是否相同?
那么我们只是简单地将最初指向链表头部的front_pointer移动到下一个要检查的节点?但是虽然我理解这一点,但从后端来看,我们如何从最后一个节点移动到倒数第二个节点?
最后,为什么我们要返回递归调用recursively_check()?我不知道我们什么时候会到达这个代码——因为我们到达这里时会返回 True 或 False,不是吗?
【问题讨论】:
-
您是否测试过这段代码,或者您只是假设它可以工作?
-
我已经对其进行了测试,现在它可以工作了——唯一缺少的是最后一次“递归检查”中的参数“head”。
-
我建议你调试它:在每次调用
recursively_check时检查head和self.front_pointer的值。诀窍有点微妙。考虑将head作为函数参数并将front_pointer作为包含对象的属性的效果。并尝试将自己限制在每个帖子的一个特定问题上。
标签: python linked-list palindrome