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
相关产品推荐
相关产品推荐

