代码随想录day4

24 两两交换链表中的节点

关键点1:创建虚拟头节点,这里cur指向虚拟头节点,每次两两交换不会影响到头节点,受影响的是头节点后的两个节点A和B,需要安排好A的前指针和B的后指针(姑且这么叫,比较方便理解)

关键点2:A的前指针和B的后指针需要提前保存以免更改next指针时找不到,cur代表一个节点的地址,cur->next改变就是节点指向的下一个节点的改变。

关键点3:每次创建的虚拟头节点,最后都需要销毁。

19 删除链表的倒数第N个节点

关键点1:思想很巧妙,灵活运用快慢指针,因为不能遍历完一遍链表再回头找倒数第n个节点,因为这是单链表,亦可以理解为单向链表。所以定义快慢指针,让快指针先走n步,那么当快指针走到null,慢指针刚好走到倒数第n个节点。

关键点2:while(fast != null)这里fast在最后一个节点也算数。

关键点3:由于这样走slow指针走到倒数第n个节点,实际上我们删除节点是利用上一个节点,所以fast走完n步应该多走一步,slow就停在倒数n+1节点上。

面试题2.7 链表相交

关键点1:相交指的是节点的地址相同,而不是节点的数值val相同。

关键点2:相交节点的毛毛虫”尾巴“长度是一样的,所以让长的毛毛虫走到与短的毛毛虫相同的位置再去遍历找交点。

142 环形链表2

这个题目感觉不但考察代码能力,更考验逻辑能力。

关键点1:快指针一次走两步,慢指针一次走一步,这样就不会错过慢指针。

关键点2:这时候,快指针和慢指针相交点就是环形链表的相遇点。将进入环形链表前的一段设为x,环形链表分为y和z,那么有公式2(x+y) = x+y+n(z+y),当n=1,由x=z。n一定为1,不多解释,与快慢指针速度有关。所有,从头节点以及相遇点同时出发,相遇点就是环形链表的入口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值