算法刷题-链表理论基础-leetcode-203.移除链表元素,707.设计链表 ,206.反转链表 (python)

203.移除链表元素

背景:

题目要求:删除链表中所有val元素,返回新链表的头节点。【python没有内置链表,使用list模拟链表内容】
观察示例:链表可能为空不存在val,可能存在val删除并返回头节点
思路:

        链表的类属性为val和next,即链表只能获取当前元素的值以及指向下一个元素的位置。

        A->B->C 删除链表的元素B的做法:将A->C,即A.next=A.next.next

        注意链表非空状态才能判断【因为可能存在首节点为空,则使用虚拟头节点:新建一个节点指向原链表】,否则返回链表本身。        

实践:

复盘:增加虚拟头节点 好用!
————————————————————————————————————————

206.反转链表

背景:

  1. 题目要求:将链表反转即第一个元素的值和最后一个元素的值交换,依次类推
  2. 观察示例:链表为空,返回空;链表有值,返回反转链表的头节点

思路:

        链表非空情况才进行反转,否则返回链表本身。

        链表反转(链表只能获取节点的值和指向下一节点的位置)示例A->B->C->D,      A.next=B, B.next=C,C.next=D,D.next=None;

反转之后A.next=None,B.next=A,C.next=B,D.next=C;

  1. 思路1:链表指向不变,改变链表元素的值,将第一个元素值交换至最后一个后,剩余元素仍需要再次交换,行不通
  2. 思路2:改变链表的指向,依次将当前指针指向上一节点,当前节点要指向上一节点则第一个节点指向None,最后一个节点指向上一节点(while 当前节点不为None),一个指针pre用于存放上一节点,一个指针用于移动节点依次将每一个节点改变指向(通过cur节点移动至tmp即可),因为当前节点指向上一节点后即与之后节点断开连结,所以每次需要临时变量存储下一节点位置(需要第一步操作),用来找到下一节点的位置;最终返回反转后的头节点即为pre(因为cur因为要移动值最后节点的位置None)

实践:

复盘:

可能有更好的解法,but先消化此思想,总结为想一次遍历反转链表,则需要依次将链表指向上一节点,

————————————————————————————————————————

707.设计链表 
背景:构造链表类,实现获取(按指标位置获取)/增(头部插入/尾部插入/按照坐标插入)/删除节点
思路:因为有删除,统一按照虚拟头节点处理,获取:遍历至指定节点返回val;  头部插入:虚拟头节点指向新的val ,size+1;尾部插入:遍历至尾部,指向新节点; 按坐标插入:遍历至指定坐标后,暂存下一节点位置,当前节点指向新节点,新节点指向暂存位置;删除指定坐标节点,遍历至坐标位置,当前节点指向下下节点
实践:


复盘:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值