LeetCode回文链表问题:两处技术疑问求助
关于LeetCode链表表示与回文链表代码异常的解决
一、LeetCode中head = [1,2,3,4]的含义
这是LeetCode的简化输入写法,别误解成头节点等于这个数组。它的实际意思是:用数组直观展示整个链表的结构——数组里的元素依次对应链表节点的val值,[1,2,3,4]代表的是以值为1的节点作为头节点,后续依次连接值为2、3、4的节点的完整链表。你理解的“头节点对应数组第一个元素”是对的,LeetCode用数组写法只是为了让你快速看懂链表结构,实际代码运行时传入的是链表的头节点对象,不是这个数组。
二、回文链表判断代码异常的原因及修复
你遇到的问题完全是创建节点的方式错了:
- 你写的
node = ListNode([1,2])是把列表[1,2]直接赋值给了单个节点的val属性,而不是创建两个节点组成的链表。遍历的时候vals列表里只会有一个元素[1,2],反转后和自身当然相等,所以永远返回True。 - 正确的做法是手动构建链表:
# 构建1->2的链表 head = ListNode(1) head.next = ListNode(2) # 调用判断方法 Solution().isPalindrome(head) - 要是经常需要从数组转链表,也可以写个小工具函数:
def arr_to_linked_list(arr): dummy = ListNode(0) curr = dummy for num in arr: curr.next = ListNode(num) curr = curr.next return dummy.next # 用工具函数创建链表 head = arr_to_linked_list([1,2]) Solution().isPalindrome(head)
这样处理后,vals会变成[1,2],反转后是[2,1],两者不相等,就能返回正确的False了。
内容的提问来源于stack exchange,提问作者Moka
相关产品推荐
相关产品推荐

