数据结构与算法基础(二)之单链表的插入与删除操作

    今天主要来讲一讲单链表的插入与删除操作的步骤和算法解释。这是单链表最基本的操作但是也是最重要的基础之一,有些地方还比较容易出错。下面我就结合源代码在上面加上注释来解释每一步的作用。

    **一、单链表的插入操作**

1、图示(截图来自网易云课堂鱼C工作室《数据结构和算法》课程视频)
这里写图片描述
2、 要想将结点s插入到ai与ai+1之间,不需要移动数据元素,只需要在ai与ai+1之间插入一个新的结点,也就是我们要插入的结点s。关键就是要修改结点p的指针域,使得结点s称为其后继。修改指针的链接的主要操作语句是:

s->next=p->next;         //把结点p的后继作为结点s的后继;
p->next=s;              //把结点s作为结点p的后继;

注意这两个语句的顺序不能调换不能调换不能调换!!!

为什么呢?如果调换①和②的顺序,那么插入操作就无法完成,并且会丢失ai结点的地址以及ai及其后面所有结点的信息。

3、下面演示插入操作的算法:

  • 11
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
对于单链表插入操作,有两种常见的情况:在链表的头部插入一个新节点和在链表的指定位置插入一个新节点。 1. 在链表头部插入新节点: 首先,创建一个新的节点,并将新节点的值设为待插入的值。 然后,将链表的头节点作为新节点的下一个节点。 最后,将新节点设为链表的新头节点。 2. 在链表指定位置插入新节点: 首先,遍历链表找到待插入位置的前一个节点。 然后,创建一个新的节点,并将新节点的值设为待插入的值。 接下来,将原来前一个节点的下一个节点设为新节点的下一个节点。 最后,将新节点设为原来前一个节点的下一个节点。 具体实现代码如下(使用Python语言): ```python class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next def insertAtHead(head, value): new_node = ListNode(value) new_node.next = head return new_node def insertAtPosition(head, position, value): if position == 0: return insertAtHead(head, value) cur = head for _ in range(position-1): if cur.next is None: raise ValueError("Invalid position") cur = cur.next new_node = ListNode(value) new_node.next = cur.next cur.next = new_node return head ``` 使用示例: ```python # 创建一个链表 1 -> 2 -> 4 head = ListNode(1) head.next = ListNode(2) head.next.next = ListNode(4) # 在头部插入新节点 0 head = insertAtHead(head, 0) # 在位置 2 插入新节点 3 head = insertAtPosition(head, 2, 3) ``` 以上是单链表插入操作的基本思路和实现代码。在实际使用中,可以根据具体需求进行相应的修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值