LeetCode234回文链表问题:为何复制反转后用==判断链表不等?
为什么反转后的链表和复制的链表用
==判断返回False? 在Python中,对于ListNode这种自定义类,默认的==运算符比较的是对象的内存地址(即两个变量是否指向同一个内存中的对象),而不是比较对象的内容是否一致。
你用deepcopy复制出的dup和反转后得到的prev是两个完全独立的链表对象——它们的节点值和链表结构虽然看起来一模一样,但各自占据不同的内存空间,所以用==判断时会返回False。
如果要判断两个链表内容是否完全相同(也就是题目要求的回文验证),需要手动遍历两个链表,逐个比较对应节点的val,同时确保两个链表同步遍历结束:
修改后的代码如下:
# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next from copy import deepcopy class Solution: def isPalindrome(self, head: Optional[ListNode]) -> bool: prev,curr=None,head dup=deepcopy(head) # 反转原链表 while curr: nxt=curr.next curr.next=prev prev=curr curr=nxt # 逐个比较节点内容 while dup and prev: if dup.val != prev.val: return False dup = dup.next prev = prev.next # 确保两个链表都遍历完毕,避免长度不一致的情况 return dup is None and prev is None
这样修改后,就能正确验证两个链表的内容是否一致,从而判断原链表是否为回文链表。
内容的提问来源于stack exchange,提问作者Tarush Gupta
相关产品推荐
相关产品推荐

