leetcode刷题_PYTHON(19):链表(19) 相交链表



class Solution: def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode: a, b = headA, headB while a != b: if a: a = a.next else: a = headB if b: b = b.next else: b = headA return a
大家好, 这周好久没有更新解题了, 甚是想念, 今天小豆来做一个python的简明解法
解题思路
这道题目让求两个链表相交的节点, 利用双指针法 O(m+n)O(m+n) 就可以遍历完成
这道题目的思想是让 aa, bb 指针都走一遍 headAheadA, headBheadB 两个链表, aa, bb 相遇的地方就是两个链表相交的地方.
aa 指向 headAheadA, 一步一步往 next 走, 走到结尾 null 时, 跳到 headBheadB 继续往后遍历
bb 指针跟 aa 一样的, 只不过先遍历 headBheadB, 到结尾了再跳到 headAheadA
为什么 a, b 会在交点相遇
假设headA, headB是有交点的, 他们整个移动的路径像一个 8 字. 我觉得这个有点像莫比乌斯环~, 两个指针的起始位置虽然不一样, 但是大家的走的步伐是一致的, 而且朝着相交的点在移动, 于是可以相遇. 画一个图来理解一下可能更加清晰.

作者:niconiconi-12
链接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists/solution/chi-xiao-dou-python-tu-wen-xiang-jie-by-j7tyi/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
本文来自博客园,作者:秋华,转载请注明原文链接:https://www.cnblogs.com/qiu-hua/p/15259897.html

浙公网安备 33010602011771号