LeetCode 面试题 02.07. 链表相交

题目

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。
图示两个链表在节点 c1 开始相交:



题目数据保证整个链式结构中不存在环。
注意,函数返回结果后,链表必须保持其原始结构。

方法

要注意的是,此处的相交并不单单代表节点值相等,即并非节点值相等处就为链表相交的节点。而是只有两个链表的相交节点及其后面节点均相同(currA == currB),才可确定此节点为链表相交的起始节点。
分别以不同的顺序走两个链表 A 和 B ,顺序 1 为先走链表 A 后走链表 B,顺序 2 为先走链表 B 后走链表 A 。即使是以不同的顺序通过两个链表,但因为两个顺序所通过的总节点数量是相同的,若同时从头节点出发,那么将会同时到达第二个链表的尾节点。
所以,我们可以得知,若两个链表存在相交,那么他们将会在走第二个链表时同时到达相交节点。若两个链表不存在相交,那么他们将会在走第二个链表时同时到达 Null 。

# 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):
        currA = headA
        currB = headB

        while currA != currB:
            if currA:
                currA = currA.next
            else:
                currA = headB

            if currB:
                currB = currB.next
            else:
                currB = headA

        return currA
参考

代码相关:https://programmercarl.com/%E9%9D%A2%E8%AF%95%E9%A2%9802.07.%E9%93%BE%E8%A1%A8%E7%9B%B8%E4%BA%A4.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容