Python中如何让两个变量指向同一引用以留存链表头节点
核心问题分析
你的代码存在两个核心错误:
- 初始状态下
head被赋值为None后,全程没有被重新赋值,最终自然返回空值 - 新建节点后没有和之前的链表节点做关联,直接将
tail指向新节点,导致链表前后断裂
正确实现代码
首先给出通用Node类定义:
class Node: def __init__(self, val, next=None): self.val = val self.next = next
从数组生成链表的完整逻辑:
def arr_to_linked_list(arr): head = tail = None for item in arr: new_node = Node(val=item) if not head: # 首个节点同时赋值给head和tail,留存头节点引用 head = tail = new_node else: # 新节点挂到当前链表末尾 tail.next = new_node # tail指针移动到新的末尾节点 tail = new_node return head
逻辑说明
- 第一次遍历到数组元素时,判断
head为空,将新建的第一个节点同时赋值给head和tail,此时head就固定指向了链表的头节点,后续不会再修改head的指向 - 后续遍历过程中,只需要将新节点赋值给当前
tail的next属性,再把tail移动到新节点即可,全程不改动head的指向,最终返回的head就是完整链表的头节点
你之前尝试用空列表、单例作为初始值的写法没有意义,核心问题是没有处理首个节点给head赋值的逻辑,直接给tail重新赋值新对象会直接切断tail和初始head指向对象的关联,自然无法得到正确结果。
内容的提问来源于stack exchange,提问作者blueBird
相关产品推荐
相关产品推荐

