题目:题目链接(简单)

标签:链表、链表-相交链表、链表-双指针、链表-快慢针

解法 时间复杂度 空间复杂度 执行用时
Ans 1 (Python) O ( N ) O(N) O(N) O ( N ) O(N) O(N) 216ms (25.96%)
Ans 2 (Python) O ( N ) O(N) O(N) O ( 1 ) O(1) O(1) 184ms (75.53%)
Ans 2 (Python) O ( N ) O(N) O(N) O ( 1 ) O(1) O(1) 180ms (84.94%)

解法一(使用Python的list直接实现):

def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
    hashmap = set()
    while headA:
        hashmap.add(headA)
        headA = headA.next
    while headB:
        if headB in hashmap:
            return headB
        headB = headB.next

解法二(双指针;因为双指针经过长度相同,因此一定会同时到达终点):

def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
    if headA and headB:
        nodeA = headA
        nodeB = headB
        while nodeA != nodeB:
            nodeA = nodeA.next if nodeA else headB
            nodeB = nodeB.next if nodeB else headA
        return nodeA

解法三(双指针):

def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
    nodeA, nodeB = headA, headB
    while nodeA != nodeB:
        nodeA = nodeA.next if nodeA else headB
        nodeB = nodeB.next if nodeB else headA
    return nodeA