📌  相关文章
📜  查找两个单链表中的公共节点(1)

📅  最后修改于: 2023-12-03 15:40:22.850000             🧑  作者: Mango

查找两个单链表中的公共节点

在单链表中查找公共节点,是一道面试过程中经典的问题。在这里我们提供一种比较简单的方案,基于哈希表实现,时间复杂度为O(n)。

问题描述

给出两个单链表,将它们相交的节点找出来,并返回该节点。如果两个链表没有相交,返回空值。

实现思路

我们可以将第一个链表中所有节点都存放到一个哈希表中。然后遍历第二个链表的同时,在哈希表中查找该节点是否存在。若存在,则该节点就是第一个相交节点。

代码实现
class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

class Solution:
    def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
        node_set = set()
        while headA:
            node_set.add(headA)
            headA = headA.next
        while headB:
            if headB in node_set:
                return headB
            headB = headB.next
        return None
复杂度分析

该算法的时间复杂度为O(n),其中n为两个链表的节点之和。空间复杂度为O(n)。因为我们需要使用哈希表存储第一个链表的节点。