美文网首页算法
160. 相交链表

160. 相交链表

作者: 红树_ | 来源:发表于2023-10-08 12:40 被阅读0次

多花时间微笑,少花时间蹙眉,多花时间表扬,少花时间批评。

题目

LC每日一题,参考160. 相交链表,题目要求使用时间复杂度 O(m + n) 、仅用 O(1) 内存。

解题思路

  • 枚举:长的先走几部走到和短的链表相同长度的位置,然后直接比较是否相等。时间复杂度O(m+n+max(m,n))
  • 双指针:此方法比较巧妙,简单说就是两个指针走完自己的链表后继续走对面的链表,因为相当于:走完不同的a+相同部分+继续走b = 走完不同的b+相同部分+继续走a,长度相等所以两个指针会相遇。

枚举 解法

class Solution {
    fun getIntersectionNode(headA:ListNode?, headB:ListNode?):ListNode? {
        if(headA == null || headB == null) return null
        var ha = headA; var hb = headB
        var m = 0; var n = 0
        while(ha != null) {
            m ++
            ha = ha.next
        }
        while(hb != null) {
            n ++
            hb = hb.next
        }
        var len1 = m - n; var len2 = n - m
        ha = headA; hb = headB
        while(len1-->0) ha = ha?.next
        while(len2-->0) hb = hb?.next
        while(ha != hb) {
            ha = ha?.next
            hb = hb?.next
        }
        return ha
    }
}

复杂度分析

  • 时间复杂度:O(m+n+max(m,n))m/n分别为两个链表的长度。
  • 空间复杂度:O(1),只使用常量个变量。

双指针 解法

我们终归会相遇,据说此解法感动了无数人。

class Solution {
    fun getIntersectionNode(headA:ListNode?, headB:ListNode?):ListNode? {
        if(headA == null || headB == null) return null
        var ha = headA; var hb = headB
        while(ha != hb) {
            ha = if(ha == null) headB else ha.next
            hb = if(hb == null) headA else hb.next
        }
        return ha
    }
}

复杂度分析

  • 时间复杂度:O(m+n)
  • 空间复杂度:O(1)

2023.10.9

相关文章

  • 160. 相交链表

    160. 相交链表[https://leetcode.cn/problems/intersection-of-tw...

  • TOP 100 51 - 56

    160. 相交链表[https://leetcode-cn.com/problems/intersection-o...

  • 160. 相交链表

    160. 相交链表[https://leetcode-cn.com/problems/intersection-o...

  • LeetCode 156-160

    160. 相交链表[https://leetcode-cn.com/problems/intersection-o...

  • LeetCode 160. 相交链表

    160. 相交链表 编写一个程序,找到两个单链表相交的起始节点。 示例 1: 输入:intersectVal = ...

  • leetcode的题目160

    160. 相交链表 编写一个程序,找到两个单链表相交的起始节点。 例如,下面的两个链表: 在节点 c1 开始相交。...

  • 每周 ARTS 第 6 期

    1. Algorithm 160. 相交链表(简单) 描述: 编写一个程序,找到两个单链表相交的起始节点。 示例:...

  • 160. 相交链表

    160. 相交链表 编写一个程序,找到两个单链表相交的起始节点。 如下面的两个链表: 在节点 c1 开始相交。 示...

  • LeetCode刷题分类之双指针160. 相交链表

    160. 相交链表 题目 编写一个程序,找到两个单链表相交的起始节点。 如下面的两个链表: 在节点 c1 开始相交...

  • 【LeetCode】链表专题

    160.相交链表 返回两个链表相交的节点 19.删除链表的倒数第N个节点 返回链表的头结点。 21.合并两个有序链表

网友评论

    本文标题:160. 相交链表

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