【leetcode】链表算法题目
熟练linux基础(鸟哥的私房菜)打好网络基础(tcp/ip卷1,计算机网络教材,熟常见协议,会tcpdump工具)算法(力扣简单或者中等题,两天一道)mysql基础,隔几天刷题以保持记忆python高级阶段,flask 框架学习开发寒假以及大二下购买拼客的视频,看熟练里面的内容,并且实操不断复习学过的东西,算法刷一刷,学习docker,K8s虚拟化以及时间允许的话学vue...
·
文章目录
160.链表的相交节点
我的思路是先计算出两个列表的长度差,然后使用双指针,长的那个先移动,然后再一起移动
class Solution:
def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
p1 = headA
p2 = headB
num1,num2,k = 0,0,0
if not(p1 or p2): # 判断链表是否为空链表
return None
while p1 != None: # 计算链表p1的长度
p1 = p1.next
num1 += 1
while p2 != None: # 计算链表p2的长度
p2 = p2.next
num2 += 1
length = abs(num2-num1) # 计算两个列表相差多长
long_length_link = headB # 找出比较长的链表
short_length_link = headA
if num1>num2:
long_length_link,short_length_link = headA,headB
p1 = long_length_link
p2 = short_length_link
while k < length: # 长的链表先移动
p1 = p1.next
k += 1
while p2.next != None and p1.next != None: # 两个链表一起移动
if p2 == p1:
return p1
p1 = p1.next
p2 = p2.next
return None
力扣评论区题解:不过这里如果链表如果不相交,会进入死循环
题解链接
class Solution:
def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
p,q = headA,headB
while q != p:
# p = p.next if headA else headB
p = p.next if p else headB
q = q.next if q else headA
return q
更多推荐
已为社区贡献2条内容
所有评论(0)