python蓝桥杯学习-链表移除元素

文章介绍了在链表中移除元素的两种方法,特别是针对单向链表的情况。一种是直接在原链表中移除,特别是处理头节点的删除;另一种是通过设置虚拟头结点,使删除操作统一。两种方法的核心都是调整要移除元素的前一个元素指向其后继元素。文章提供了具体的代码实现过程。
摘要由CSDN通过智能技术生成

一、链表移除元素方法介绍

在链表中移除元素,基本思想都是把要移除元素的上一个元素指向要移除元素的下一个元素,如图所示。

但如果在单向链表中,没有指向头节点的指针,则不能直接使用“把待删除的上一个元素指向待删除的下一个元素”这种方法,此时移除元素有两种方法,一种是直接使用原链表移除,另一种是定义虚拟头节点进行移除。

1、直接在原链表中移除

如果直接在原链表中移除,就是直接把原来头节点的指针右移

2、设置虚拟头结点移除

在原链表的头结点前设置一个虚拟头节点,原来虚拟头结点的指针指向原链表的头节点,要删除原链表的头节点,就是把这个虚拟头结点指向原来头结点的下一个节点。

设置虚拟头结点来删除的好处:可以链表统一删除元素的方式,即均采用“待删除的上一个元素指向要删除的下一个元素”的思想。

二、具体实现

两种的整体思想不同,实现的代码也略有差异,但除了头节点,移除的方式都是把要移除元素的前一个元素指向要移除元素的下一个元素。

1、直接移除

直接移除则不使用虚拟头节点

要删除的元素就两种情况:

  • 删除头节点之后的元素

  • 删除头节点

在删除除了头节点以外的元素都是直接把这个元素的上一个元素指向这个元素的下一个元素,即if cur.next.val (指向的是要删除的节点的上一个)==val:cur = cur.next.next(指向要删除节点的下一个)

如果是头节点的话,就直接把头指针右移,即head = head.next

注意循环是用while而不是if,因为可能出现1,1,1,1的链表,这个链表要删除的target是1的话,就要删除头指针及头指针之外的。

步骤:

  1. 定义临时指针cur,初始化cur=head

  1. 在指针不为空的情况下,进行移除操作

  1. 判断要删除的元素是否为头节点,若为头节点,则向后移动,head=head.next

  1. 若要删除的不为头节点且存在,if cur.next.val == val,则将要删除元素的前一个元素指向要删除元素的后一个元素,cur.next = cur.next.next

2、设置虚拟头结点

使用虚拟头结点,删除的方式就统一了,都是直接把要删除的元素的上一个节点指向要删除元素的下一个结点。

步骤:

1.定义一个虚拟头结点dummy_head,指向头结点,初始化即dummy_head.next=head

2.使用while循环,当指针不为空时,进行移除操作

如果找到了要删除的节点,直接把这个节点的上一个指针指向这个节点的下一个元素,if cur.next.val == val : cur.next = cur.next.next

否则把临时指针下移,cur = cur.next

代码

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值