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

LeetCode中为何用l1.val访问链表元素而非列表索引?

为什么LeetCode「Add Two Numbers」中用l1.val而非列表索引访问元素?

核心原因:传入的不是普通列表,而是ListNode实例

你看到题目里的l1 = [2, 4, 3]只是LeetCode对输入的可视化简化展示,实际传入addTwoNumbers函数的并不是Python原生的列表对象,而是题目定义好的ListNode类的实例——也就是单链表的头节点。

理解ListNode类的作用

题目给出的ListNode类是单链表的基础节点结构:

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

每个ListNode实例包含两个核心属性:

  • val:存储当前节点对应的数值(比如你提到的2、4、3)
  • next:指向链表中下一个ListNode实例的引用,用于把多个节点串联成完整链表

代码中的访问逻辑

在解题代码里:

  • l1.val是直接获取当前链表节点的数值,比如头节点的val就是2
  • 通过l1.next可以移动到链表的下一个节点,比如l1.next.val就能拿到4,这就是代码里循环中l1 = l1.next的作用——遍历整个链表

和普通列表的区别

  • 普通列表是连续内存存储,支持用l1[index]直接定位访问元素
  • 单链表是离散的节点通过next指针串联,必须通过节点的val属性获取当前值,通过next指针逐个遍历后续节点

内容的提问来源于stack exchange,提问作者Roy T

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 17:07:43