jz052.两个链表的第一个公共节点

 

相交链表

此题与lc160.想叫链表相同。思路很简单,也可以说是双指针法,即将两个链表拼接,得到两个相同长度但前后顺序不同的链表(假设输入的是两个链表X和Y,则拼接成的新链表为XY和YX)。分别从头遍历这俩链表,当节点值相等时则为相交位置,否则遍历结束返回指针指向的None。该算法的时间复杂度为O(M+N),空间复杂度为O(N)。

# 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:
        h1, h2 = headA, headB
        while h1 != h2:
            h1 = h1.next if h1 else headB
            h2 = h2.next if h2 else headA
        return h1