LeetCode707设计链表

原理

这段代码实现了一个简单的链表数据结构,通过自定义的结构体 LinkedNode 来表示链表中的节点,包含节点的值 val 和指向下一个节点的指针 next。整个链表类 MyLinkedList 提供了多种操作链表的方法,如获取指定位置节点的值、在表头、表尾或指定索引位置插入节点以及删除指定索引位置的节点等操作,利用一个虚拟头节点 _dummyHead 来简化链表操作时的边界情况处理,同时使用 _size 变量记录链表的长度,方便进行各种操作的合法性判断以及索引控制。

步骤

  1. 构造函数 MyLinkedList() 初始化链表(构造函数部分)
    创建一个值为 0 的虚拟头节点 _dummyHead,它不存储实际的数据,主要用于方便后续链表操作,避免对表头节点的特殊处理情况。同时将链表长度 _size 初始化为 0,表示此时链表为空。

  2. 获取指定位置节点的值 get(int index) 方法(get 函数部分)

    • 首先进行合法性判断,检查传入的索引 index 是否超出链表范围(大于 _size - 1 或者小于 0),如果超出范围则直接返回 -1,表示无法获取对应位置的节点值。
    • 如果索引合法,从虚拟头节点的下一个节点(真正存储数据的第一个节点)开始,通过 while 循环不断让指针 cur 向后移动,每移动一次 index 减 1,直到 index 变为 0,此时 cur 指针指向的就是要获取值的目标节点,最后返回该节点的 val 值。
  3. 在表头插入节点 addAtHead(int val) 方法(addAtHead 函数部分)

    • 创建一个新的节点 newNode,其值为传入的 val,初始时 newNode 的 next 指针指向当前虚拟头节点的下一个节点(即原链表的第一个节点,如果链表为空则为 NULL)。
    • 然后将虚拟头节点的 next 指针指向新创建的节点 newNode,这样新节点就成为了链表的第一个实际存储数据的节点,最后将链表长度 _size 加 1,表示链表中节点数量增加了一个。
  4. 在表尾插入节点 addAtTail(int val) 方法(addAtTail 函数部分)

    • 创建一个值为 val 的新节点 newNode
    • 通过一个 while 循环,从虚拟头节点开始,不断移动指针 cur 直到找到当前链表的最后一个节点(即 cur->next 为 NULL 的节点)。
    • 将最后一个节点的 next 指针指向新创建的节点 newNode,把新节点添加到链表尾部,同时将链表长度 _size 加 1。
  5. 在指定索引位置插入节点 addAtIndex(int index, int val) 方法(addAtIndex 函数部分)

    • 先进行索引合法性判断,如果 index 大于链表长度 _size,则直接返回,不进行插入操作,因为这种情况下无法在指定位置插入;如果 index 小于 0,则将 index<
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值