160. 相交链表

题目

题解:双指针

  • 思路:计算两条链表的长度,找到长度差,让长的链表多走差的值,返回第一个相等的元素
class Solution:
    def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> Optional[ListNode]:
        count1,count2=0,0
        pa=headA
        pb=headB
        while headA:# 计算链表 A 的长度
            headA=headA.next
            count1+=1
        while headB:# 计算链表 B 的长度
            headB=headB.next
            count2+=1
        if count1>count2:
            count=count1-count2# 计算长度差
            #让A链先走count步
            while count!=0:
                pa=pa.next
                count-=1
        elif count1<count2:
            count=count2-count1# 计算长度差
            #让B链先走count步
            while count!=0:
                pb=pb.next
                count-=1
        while pa and pb:# 同时遍历链表 A 和链表 B,找到第一个相等的节点
            if pa==pb:
                return pa
            pa=pa.next
            pb=pb.next
        return None# 如果没有交点,返回 None      
posted @ 2024-01-29 14:22  Frommoon  阅读(1)  评论(0编辑  收藏  举报