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

Python链表双指针遍历实现中head更新与传值机制疑问

需求说明

实现函数将链表每个节点的next值设置为当前节点往后数val个位置的节点。例如原链表为2->1->4->2,处理后结果为2->4,若往后数val个节点超出链表边界,则next指向None。

现有实现代码
def solve(self, node):
    head = node
    curr = head
    while curr:
        save = curr
        c = 0
        while c < save.val and curr:
            curr = curr.next
            c = c + 1
        save.next = curr
    return head
疑问解答

你的疑问本质是对Python参数传递规则和链表修改逻辑的误解,核心逻辑如下:

  • Python的参数传递是「传递对象引用的拷贝」,你传入的node本质是头节点的内存地址引用。head = node的赋值操作只是把同一个头节点的引用拷贝给了head变量,此时node和head指向内存中完全相同的头节点对象,没有发生任何实体数据的拷贝。
  • 整个函数运行过程中,你从来没有修改过head变量本身的指向,所有的修改都是调整各个节点对象内部的next属性,也就是调整链表的节点关联关系。head从头到尾都固定指向最开始的头节点,没有发生过更新。
  • 你完全可以直接返回原始传入的node,运行结果和返回head没有任何区别。代码里返回head只是常规编码习惯:显式声明返回的是链表的头节点,方便代码阅读者快速理解返回值的含义,没有功能层面的必要性。

内容的提问来源于stack exchange,提问作者t-dawg27

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:06:01