【Leetcode】面试题 02.07. 链表相交

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。

图示两个链表在节点 c1 开始相交:

一看不会,一看答案就懂

【Leetcode】面试题 02.07. 链表相交_第1张图片

我们求出两个链表的长度,并求出两个链表长度的差值,然后让curA移动到,和curB 末尾对齐的位置,如图:

【Leetcode】面试题 02.07. 链表相交_第2张图片

 此时我们就可以比较curA和curB是否相同,如果不相同,同时向后移动curA和curB,如果遇到curA == curB,则找到交点。否则循环退出返回空指针。

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

class Solution(object):
    def getIntersectionNode(self, headA, headB):
        """
        :type head1, head1: ListNode
        :rtype: ListNode
        """
        lenA,lenB = 0,0
        # 计算 A B 的长度
        cur = headA
        while cur:
            lenA += 1
            cur = cur.next
        cur = headB
        while cur:
            lenB += 1
            cur = cur.next
        
        # A B之间的差值
        curA = headA
        curB = headB
        if lenA > lenB:
            curA,curB = curB,curA
            lenA,lenB = lenB,lenA
        
        for _ in range(lenB - lenA):
            curB = curB.next

        # 找交集
        while curA:
            if curA == curB:
                return curA
            else:
                curB = curB.next
                curA = curA.next
        
        return None



你可能感兴趣的:(Leetcode,leetcode,链表,python)