160. 相交链表 - 力扣(LeetCode)

方法1:暴力法

时间复杂度 :O(m×n)
空间复杂度:O(1)

python 复制代码
# encoding = utf-8
# 开发者:Alen
# 开发时间: 13:10 
# "Stay hungry,stay foolish."

# 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
        """
        # 2026 - 1 - 5 错题集
        currentA = headA
        while currentA: # 遍历到最后currentA为None,while currentA:为False,循环退出
            currentB = headB
            while currentB:
                if currentA == currentB:
                    return currentA
                currentB = currentB.next
            currentA = currentA.next
        return None

方法2:哈希表法

时间复杂度 :O(m+n)
空间复杂度:O(m) 或 O(n)

python 复制代码
# encoding = utf-8
# 开发者:Alen
# 开发时间: 13:10 
# "Stay hungry,stay foolish."

# 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
        """
        # 2026 - 1 - 5 错题集
        seen = set()
        currnt = headA
        while currnt:
            seen.add(currnt)
            currnt = currnt.next

        currnt = headB
        while currnt:
            if currnt in seen:
            # if current in seen_list 这个操作在列表中是线性查找(O(m)),导致整体复杂度为 O(m×n),效率低下。
                return currnt
            currnt = currnt.next
        return None

方法3:双指针法

时间复杂度 :O(m+n)
空间复杂度:O(1)

python 复制代码
# encoding = utf-8
# 开发者:Alen
# 开发时间: 13:10 
# "Stay hungry,stay foolish."

# 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
        """
        # 2026 - 1 - 5 错题集
        p1, p2 = headA, headB
        while p1 != p2:
            if p1:
                p1 = p1.next
            else:
                p1 = headB
            if p2:
                p2 = p2.next
            else:
                p2 = headA

        # 相交点或null(不相交时pA/pB均为null)
        return p1

结果

解题步骤1:www.youtube.com

解题步骤2:www.bilibili.com

相关推荐
不会就选b5 小时前
算法日常・每日刷题--<链表>3
数据结构·算法·链表
稚南城才子,乌衣巷风流7 小时前
块状链表:数据结构详解与实现
数据结构·链表
闪电悠米7 小时前
力扣hot100-48.旋转图像-转置翻转详解
算法·leetcode·职场和发展
啦啦啦啦啦zzzz8 小时前
算法:贪心算法
c++·算法·leetcode·贪心算法
日拱一卒——功不唐捐9 小时前
红黑树删除(C语言)
c语言·数据结构
不如语冰10 小时前
AI大模型入门-Python进阶-上下文管理与with语句
开发语言·数据结构·数据库·人工智能·pytorch·redis·python
Angle.寻梦11 小时前
数据结构--链表
数据结构·链表
ykdcdc11 小时前
DC-DC隔离和非隔离怎么选?工控/监控/医疗分别用哪种
数据结构·汽车·推荐算法
Angle.寻梦12 小时前
数据结构--堆
数据结构
笨鸟先飞的橘猫14 小时前
redis数据结构学习——stream
数据结构·redis·学习