用列表创建链表的困惑:为何注释代码无法成功构建链表?
链表创建代码问题的原因解析
先看你提供的代码:
def head_list_to_linkedlist(ll): head1 = ListNode(ll[0]) for val in ll[1:]: node = ListNode(val) node.next = head1 head1 = node #ListNode(val).next = head1 #head1 = ListNode(val) return head1
正常代码的逻辑
- 先创建新节点并把它存在
node变量里,拿到这个节点的引用 - 把
node.next指向当前的head1(也就是已经建好的链表的头部),让新节点和旧链表连起来 - 最后把
head1更新为这个新节点,这样新节点就成了新的链表头部,整个链表结构连贯
注释代码失效的核心原因
- 第一行
ListNode(val).next = head1:虽然创建了新节点并设置了next,但这个节点没有被任何变量保存,执行完这行后,这个节点就成了无主的垃圾数据,会被Python回收,根本没和后续链表产生关联 - 第二行
head1 = ListNode(val):这是重新生成了一个完全独立的新节点,和第一行的节点不是同一个对象,这个新节点的next属性完全没设置。等于每次循环都在生成一个孤立的节点,覆盖掉之前的head1,最后返回的head1只是列表最后一个元素的节点,前面的节点全断了,自然没法形成完整的链表
内容的提问来源于stack exchange,提问作者xiaoyueyue
相关产品推荐
相关产品推荐

