关于链表具体如何操作(插入,删除,遍历)
链表的插入、删除、遍历大家应该对此都知道个大概吧,那么具体如何用代码表示操作呢?接下来我将给大家详细讲解并附上代码示例。
链表的插入
我们可以假设这样一个场景:在传递情报过程中,A的下线是B, 也就是A -> next = B
, 现在我们要引入一个C充当A和B之间的中间人,A的下线是C, C的下线是B,我们可以直接将A的next
指向C,即A -> next = C
, 然后将C的next
指向B, 但是B无法直接表示,之前是用A -> next
来表示B的,现在A -> next
已经指向C了,所以在操作之前,我们需要实现定义一个变量保存B,假设为tmp
, 然后将C的next
指针指向B即可。
在链表中,具体插入的过程如下:
- 找到要插入的位置的前一个节点,将之命名为
cur
, 要插入的位置的下一个节点,将之命名为tmp
, 它们之间的关系是cur -> next = tmp
- 创建一个新的链表
newNode
, 将cur
的next指针
指向newNode
, 即cur -> next = nowNode
- 将
newNode
的next指针
指向tmp
, 即newNode -> next = tmp
这样就完成了链表节点的插入过程。转换成代码如下:
new
是一个运算符,它的作用就是在堆内存中动态分配内存空间,并返回分配内存的地址,使用方式一般为指针变量 = new 数据类型
箭头语法(->
):用于通过指针访问指针所指向的对象的成员,cur
是一个指向 ListNode
结构体对象的指针,而 next
是 ListNode
结构体内部的一个成员变量(指向下一个节点的指针)。使用 cur->next
表示访问 cur
所指向的节点的 next
成员变量。
链表的删除
删除链表的过程则比较简单,只需要找到删除节点的前一个节点cur
, 并将其next
指针设置为指向当前节点的下下个节点,从而跳过了下一个节点,实现了节点的删除操作。
代码示例如下:
链表的遍历
定义了一个名为 cur
的指针,它初始化为指向 head
,即链表的头节点。
什么时候链表迭代到最后一个节点呢?检查当前节点 cur
的下一个节点是否存在(不为 NULL), 当前节点的下一个节点为NULL(空指针)
时说明下一个节点为空节点,即链表的末尾。
在循环体内,打印当前节点 cur
的下一个节点(cur->next
)的值(val
)。接下来,将 cur
更新为指向链表中的下一个节点,以便在下一次循环中打印下一个节点的值。
练习题
接下来让我们通过具体的题目练习一下链表的操作吧!
代码如下:
持续更新中。。。。。。。