关于LinkedList指针指向及insert_beginning方法逻辑的技术问询
嘿,让我来一步步帮你理清这两个问题~
1. LinkedList中的指针指向哪个方向?
这个实现是单向链表,指针的指向是从头部节点向尾部节点方向(也就是 head → 中间节点 → tail)。每个节点的next_node属性保存的是它下一个节点的引用,整个链表是正向链式结构,只能从head开始顺着next指针遍历到后面的节点。
2. 关于
insert_beginning(self, new_value)方法的逻辑解析 你这里的理解有点小误区,咱们结合测试代码的执行步骤来拆解,就能明白为什么当前代码是正确的:
首先看测试代码的执行流程:
# 第一步:创建初始链表,head_node是值为5的节点 ll = LinkedList(5) # 此时链表结构:5 # 第二步:在头部插入70 ll.insert_beginning(70) # 执行过程: # 1. 创建新节点new_node(值为70) # 2. new_node.set_next_node(self.head_node) → 把70的next指向原来的head(节点5) # 3. self.head_node = new_node → 把链表的head更新为70 # 此时链表结构:70 → 5 # 第三步:在头部插入5675 ll.insert_beginning(5675) # 执行过程: # 1. 创建新节点new_node(值为5675) # 2. new_node.set_next_node(self.head_node) → 把5675的next指向当前的head(节点70) # 3. self.head_node = new_node → 把链表的head更新为5675 # 最终链表结构:5675 → 70 → 5
你提到的误区解释
你说“难道不应该使用self.head_node.set_next_node(new_node),从而生成链表5 -> 70 -> 5675”——其实这个操作是在链表的尾部添加节点(或者说在当前head的后面添加),而不是头部插入。如果这么写,每次插入的新节点都会变成当前head的下一个节点,head始终是最初的5,这就不符合insert_beginning(在头部插入)的方法语义了。
头部插入的正确逻辑
insert_beginning的核心是要让新节点成为链表的新头部,所以必须:
- 先让新节点的next指向原来的head(这样新节点才能和原链表连接起来)
- 再把链表的head更新为这个新节点
这样每次插入的节点都会排在链表的最前面,完全符合“在头部插入”的预期。
内容的提问来源于stack exchange,提问作者Sharon Ng
相关产品推荐
相关产品推荐

