gpt4 book ai didi

python - 检查链表是否是回文。找不到问题

转载 作者:行者123 更新时间:2023-12-01 09:10:44 25 4
gpt4 key购买 nike

class Solution(object):
def isPalindrome(self, head):
"""
:type head: ListNode
:rtype: bool
"""
if head == None:
return True

if head.next == None:
return True

slow = head
fast = head

if fast.next.next == None:
return fast.val == fast.next.val

length = 1

lenPtr = head

while lenPtr.next != None:
length += 1
lenPtr = lenPtr.next

while fast != None and fast.next != None:
slow = slow.next
fast = fast.next.next

if length % 2 == 0: # even
rev = self.reverse(slow)

else:
rev = self.reverse(slow.next)

slow = None

print(rev.val, head.val, head.next.val)
return rev == head

def reverse(self, head):

if head.next == None:
print('return head', head.val)
return head

tempHead = head

while head.next != None:
temp = head.next
head.next = head.next.next
temp.next = tempHead
tempHead = temp

return tempHead

这是我针对一个编码面试问题的解决方案,该问题确定链表是否是回文。

我的策略是用两个不同速度的指针找到链表的中点,然后反转链表的后半部分,然后与前半部分进行比较。

经过调试,问题是链表的前半部分在奇数长度列表时没有删除最后一个节点。例如,如果输入为 1->0->1->None,则后半部分最终将为 1->None,前半部分应为 1->None 也是因为我在得到相反的后半部分后做了 slow = None

但是,即使设置 slow = None 后,它似乎仍然具有 0 节点。这很奇怪,因为当我尝试调试它时,head.next == Slow 返回true

可能是什么问题?

最佳答案

slow视为指向列表中节点的指针。将其设置为 None 不会更改它之前指向的节点,它只是将 slow 设置为指向另一个节点,或指向 None你的情况的节点。所以它不再指向 0,但 0 仍然存在,并且仍然在其位置,由 head 指向。

所以 head.next 仍然指向下一个节点,即 0,因此列表的前半部分是 1->0->None .

关于python - 检查链表是否是回文。找不到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51667350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com