leetcode hot100 160.相交链表 easy 链表双指针




链表A和B若相交:

listA = a +c

listB = b + c

a,b,c为长度

则:

a+c+b = b+c+a

说明链表A指针从头走完后,再从链表B头开始走

说明链表B指针从头走完后,再从链表A头开始走
则:他们会在相交点相遇

  • 让两个指针分别遍历 A + B 和 B + A 的路径,它们走过的总路程是相等的。
  • 如果链表相交,它们一定会在相交点相遇; (pA == pB)
  • 如果不相交,它们最终会同时指向 null。 (pA == pB == None)

即,最后都会 pA == pB

python 复制代码
# 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) -> Optional[ListNode]:

        if not headA or not headB:
            return None

        pa = headA
        pb = headB

        while pa != pb:
            if pa:  # A指针还在走A链表
                pa = pa.next
            else:
                pa = headB
            
            if pb:
                pb = pb.next
            else:
                pb = headA
            

        return pa
        

时间复杂度: O ( m + n ) O(m + n) O(m+n) 。其中 m m m 和 n n n 分别是两个链表的长度。最坏情况下,每个指针都会完整遍历两个链表各一次。
空间复杂度 : O ( 1 ) O(1) O(1)。只使用了两个指针,没有使用额外的存储空间。

相关推荐
Q741_14720 分钟前
每日一题 力扣 3655. 区间乘法查询后的异或 II 模拟 分治 乘法差分法 快速幂 C++ 题解
c++·算法·leetcode·模拟·快速幂·分治·差分法
abant21 小时前
leetcode 239 单调队列 需要一些记忆
算法·leetcode·职场和发展
Little At Air3 小时前
LeetCode 30. 串联所有单词的子串 | 困难 C++实现
算法·leetcode·职场和发展
手握风云-4 小时前
优选算法的层序之径:队列专题
数据结构·算法·leetcode
6Hzlia4 小时前
【Hot 100 刷题计划】 LeetCode 74. 搜索二维矩阵 | C++ 二分查找 (一维展开法)
c++·leetcode·矩阵
北顾笙9804 小时前
day20-数据结构力扣
数据结构·算法·leetcode
生信研究猿4 小时前
leetcode 121.买卖股票的最佳时机
算法·leetcode·职场和发展
sheeta19985 小时前
LeetCode 每日一题笔记 日期:2026.04.09 题目:3655.区间乘法查询后的异或二
笔记·算法·leetcode
穿条秋裤到处跑5 小时前
每日一道leetcode(2026.04.08):区间乘法查询后的异或 I
算法·leetcode
6Hzlia5 小时前
【Hot 100 刷题计划】 LeetCode 240. 搜索二维矩阵 II | C++ 巧妙利用单调性 (BST 法)
c++·leetcode·矩阵