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

相关推荐
POLITE31 小时前
Leetcode 23. 合并 K 个升序链表 (Day 12)
算法·leetcode·链表
会员果汁2 小时前
leetcode-动态规划-买卖股票
算法·leetcode·动态规划
橘颂TA2 小时前
【剑斩OFFER】算法的暴力美学——二进制求和
算法·leetcode·哈希算法·散列表·结构与算法
尋有緣4 小时前
力扣1355-活动参与者
大数据·数据库·leetcode·oracle·数据库开发
kaikaile19955 小时前
基于拥挤距离的多目标粒子群优化算法(MO-PSO-CD)详解
数据结构·算法
不忘不弃5 小时前
求两组数的平均值
数据结构·算法
leaves falling5 小时前
迭代实现 斐波那契数列
数据结构·算法
Morwit6 小时前
*【力扣hot100】 647. 回文子串
c++·算法·leetcode
DonnyCoy6 小时前
Android性能之数据结构
数据结构
天赐学c语言6 小时前
1.7 - 删除排序链表中的重要元素II && 哈希冲突常用解决冲突方法
数据结构·c++·链表·哈希算法·leecode