美文网首页
【Leetcode】 链表相交

【Leetcode】 链表相交

作者: 死鱼 | 来源:发表于2020-08-04 15:25 被阅读0次

    题目

    image.png

    刚开始时直接上暴力遍历过了题目,然后看了大佬的题解,记录下这个双指针的方法

    解法:双指针交换

    我们目标是找到相交的地址,而不是相同的数值,所以方法就是两边指针先同时向后走,走完了之后,去另一个头重新开始向后走

    1. 在最坏情况下,保证两个指针走的路程,的最大值是 len(a)+len(b),因为如果没有相交,两个指针必然走完了两条链表,然后在最后一个nil地方等值。


      image.png
    2. 相交的情况下,两个指针最晚也能在第二趟的时候遇到交点并且等值。


      image.png

      因为双指针本质上就是两个指针走两条链表,而这两条链表是(A->B)和(B->A),把上面的图转换一下


      image.png

    因为相交的节点,后面接的都是完全一样的,没有区别,问题就是前面有多少个不相交的点,而指针换头就是抵消了前面不相交的点。所以只要有交点,就一定能在双指针遍历中碰到。

    代码:

    func getIntersectionNode(headA, headB *ListNode) *ListNode {
        tempA := headA
        tempB := headB
    
        for tempA != tempB {
            if tempA != nil {
                tempA = tempA.Next
            } else {
                tempA = headB
            }
    
            if tempB != nil {
                tempB = tempB.Next
            } else {
                tempB = headA
            }
        }
        
        return tempA
    }
    

    相关文章

      网友评论

          本文标题:【Leetcode】 链表相交

          本文链接:https://www.haomeiwen.com/subject/cpdwrktx.html