栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

链表环相关问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

链表环相关问题

文章目录
    • 1. 判断链表是否有环
      • 解法一 哈希表
      • 解法二(最优解) 快慢指针
    • 2. 获取环的入口节点
      • 题解参考
      • Java实现
    • 3. 计算环的长度
    • 为什么快慢指针一定会相遇?

1. 判断链表是否有环
  • 环形链表
解法一 哈希表
  • 将遍历过的节点存入哈希表,利用哈希表数据唯一性
 
public class Solution {
    public boolean hasCycle(ListNode head) {
        if(head == null) return false;
        Set s = new HashSet<>();
        while(head != null){
            if(!s.add(head)) return true;
            head = head.next;
        }
        return false;
    }
}
解法二(最优解) 快慢指针
  • 此解法空间复杂度O(1), 时间复杂度O(n)
public class Solution {
    public boolean hasCycle(ListNode head) {
        if(head == null) return false;
        ListNode slowPointer = head;
        ListNode fastPointer = head.next;
        while(slowPointer != fastPointer){
            if(fastPointer == null || fastPointer.next == null) //这里只需判断fastPointer
                return false;
            slowPointer = slowPointer.next;
            fastPointer = fastPointer.next.next;
        }
        return true;
    }
}
2. 获取环的入口节点
  • 剑指 Offer II 022. 链表中环的入口节点
题解参考
  • 题解
Java实现
public class Solution {
    public ListNode detectCycle(ListNode head) {
        if(head == null || head.next == null) return null;
        ListNode fast = head;
        ListNode slow = head;
        while(fast != null && fast.next != null) {
            slow = slow.next;
            fast = fast.next.next;
            if(fast == slow) {//判断出链表有环,快指针放到链表开始,然后快慢指针同速度前进
                fast = head;
                while(slow != fast) {
                    slow = slow.next;
                    fast = fast.next;
                }
                return fast;
            }
        }
        return null;
    }
}
3. 计算环的长度
  • 在解决前两个问题的基础上,此问题变得很简单了
  • 参考文章
为什么快慢指针一定会相遇?
  • 快慢指针慢指针和快指针一定会相遇
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/686010.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号