python刷题笔记怎么改_力扣刷题Python笔记:

题目

编写一个程序,找到两个单链表相交的起始节点。

a139f06556a66c9f3bdbdf465d98405d.png

5e7d43a033de4d0759d4e980d2f1ffe1.png

d9b5d9c916df38d54ad7d4ea687a00a0.png

38a1a1ad8c02cceb713324ed5452b2c1.png

来源:力扣(LeetCode)

Python解法

双指针+链表拼接

这道题我原本想的是从两个链表的尾部开始向前寻找,直到找到两链表的节点不同位置,那么该位置的下一个节点就是我们要求的结果。但是这是个单向链表,好像很难实现向前寻找的。

看了题解,发现他们用的是链表拼接的方法来实现的,具体的解题思路如下:

①将两个链表进行拼接,设长-短链表的指针为 PA,短-长链表为 PB (分别代表长链表在前和短链表在前的拼接链表),则当 PA 走到长-短链表交接处时,PB 走在长链表中,且与长链表头距离为长度差;

②当 PA 与 PB 相等时,结束循环,返回 PA 即为最终结果;

③如果长链表与短链表长度相等,如果两个链表有相交节点,那么在指针在遍历到链表交接处之前就会得到最终结果(因为此时两链表没有长度差);如果两个链表没有相交节点,那么在指针遍历到链表交接处时,会得到两个None,即为最终结果。

d70cade9ce2a21f8ecb42f6b37e3116c.png

代码如下:

def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:

PA, PB = headA, headB

while PA!= PB:

PA = PA.next if PA else headB

PB = PB.next if PB else headA

return PA

正常的思路应该是这样:设定两个指针分别指向两个链表的头部,一起向前走直到其中一个到达末端,另一个与末端距离则是两链表的长度差,再通过长链表指针先走的方式消除长度差。

标签:PB,Python,链表,力扣,拼接,PA,指针,节点,刷题

来源: https://blog.csdn.net/weixin_45517168/article/details/110260169

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值