You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于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的核心是要让新节点成为链表的新头部,所以必须:

  1. 先让新节点的next指向原来的head(这样新节点才能和原链表连接起来)
  2. 再把链表的head更新为这个新节点

这样每次插入的节点都会排在链表的最前面,完全符合“在头部插入”的预期。

内容的提问来源于stack exchange,提问作者Sharon Ng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:33:58