原理
这段代码实现了一个简单的链表数据结构,通过自定义的结构体 LinkedNode 来表示链表中的节点,包含节点的值 val 和指向下一个节点的指针 next。整个链表类 MyLinkedList 提供了多种操作链表的方法,如获取指定位置节点的值、在表头、表尾或指定索引位置插入节点以及删除指定索引位置的节点等操作,利用一个虚拟头节点 _dummyHead 来简化链表操作时的边界情况处理,同时使用 _size 变量记录链表的长度,方便进行各种操作的合法性判断以及索引控制。
步骤
-
构造函数
MyLinkedList()初始化链表(构造函数部分)
创建一个值为 0 的虚拟头节点_dummyHead,它不存储实际的数据,主要用于方便后续链表操作,避免对表头节点的特殊处理情况。同时将链表长度_size初始化为 0,表示此时链表为空。 -
获取指定位置节点的值
get(int index)方法(get函数部分)- 首先进行合法性判断,检查传入的索引
index是否超出链表范围(大于_size - 1或者小于 0),如果超出范围则直接返回 -1,表示无法获取对应位置的节点值。 - 如果索引合法,从虚拟头节点的下一个节点(真正存储数据的第一个节点)开始,通过
while循环不断让指针cur向后移动,每移动一次index减 1,直到index变为 0,此时cur指针指向的就是要获取值的目标节点,最后返回该节点的val值。
- 首先进行合法性判断,检查传入的索引
-
在表头插入节点
addAtHead(int val)方法(addAtHead函数部分)- 创建一个新的节点
newNode,其值为传入的val,初始时newNode的next指针指向当前虚拟头节点的下一个节点(即原链表的第一个节点,如果链表为空则为NULL)。 - 然后将虚拟头节点的
next指针指向新创建的节点newNode,这样新节点就成为了链表的第一个实际存储数据的节点,最后将链表长度_size加 1,表示链表中节点数量增加了一个。
- 创建一个新的节点
-
在表尾插入节点
addAtTail(int val)方法(addAtTail函数部分)- 创建一个值为
val的新节点newNode。 - 通过一个
while循环,从虚拟头节点开始,不断移动指针cur直到找到当前链表的最后一个节点(即cur->next为NULL的节点)。 - 将最后一个节点的
next指针指向新创建的节点newNode,把新节点添加到链表尾部,同时将链表长度_size加 1。
- 创建一个值为
-
在指定索引位置插入节点
addAtIndex(int index, int val)方法(addAtIndex函数部分)- 先进行索引合法性判断,如果
index大于链表长度_size,则直接返回,不进行插入操作,因为这种情况下无法在指定位置插入;如果index小于 0,则将index<
- 先进行索引合法性判断,如果

最低0.47元/天 解锁文章
286

被折叠的 条评论
为什么被折叠?



