python相交链表

题目

思路

直接去比较肯定是不可行的,因为不知道什么时候访问A的下一个指针和B的下一个指针。数学思路:设立两个指针A和B分别等于headA和headB,A遍历一遍链表A走的路程设置为a,B遍历一遍链表B走的路程设置为b,如果A和B有重合,设重合的部分长度为c,那么指针A遍历完A再遍历B走到相交点的路程为a+b-c,同理指针B走完B再走A走到相交点的路程也是a+b-c,路程是一样的,所以可以同时走,设定条件A走完A再走B,B走完B再走A,直到A=B相遇的时候,这个点即为相交点。如果没有相交点,A走完A和B的距离和B走完B和A的距离也是相同的,此时A=B=NULL。

代码

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
        A, B = headA, headB		##设置两个假指针
        while A!=B:
        	if A:
        		A = A.next		##A指针遍历链表A
        	else:
        		A = headB		##A指针遍历链表B
        	if B:
        		B = B.next		##B指针遍历链表B
        	else:
        		B = headA		##B指针遍历链表A
        return A		##此时A的位置就是相交点的位置
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值