• 环形链表(LeetCode 141、142)


    ❤ 作者主页:李奕赫揍小邰的博客
    ❀ 个人介绍:大家好,我是李奕赫!( ̄▽ ̄)~*
    🍊 记得点赞、收藏、评论⭐️⭐️⭐️
    📣 认真学习!!!🎉🎉


     

    环形链表1

      给你一个链表的头节点 head ,判断链表中是否有环。
      如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。如果链表中存在环 ,则返回 true 。 否则,返回 false

    在这里插入图片描述

     

    解法:

      利用Set集合的无重复值,唯一性去判断结点是否重复是最简单有效的办法。如果能添加则证明无环,若是无法添加,代表有一样的结点,所以有环。

    public class Solution {
        public boolean hasCycle(ListNode head) {
            ListNode p=head;
            Set<ListNode> set=new HashSet<ListNode>();
            while(p!=null){
                if(!set.add(p))
                    return true;
                p=p.next;
            }
            return false;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

     

    环形链表2

      给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
      如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。不允许修改 链表。

    在这里插入图片描述

     

    解法一:Set集合

      因为要返回的是一个结点,所以每次p=p.next前,我们都要将值赋值出去。

    public class Solution {
        public ListNode detectCycle(ListNode head) {
            ListNode p=head;
            ListNode q=head;
            Set<ListNode> set=new HashSet<ListNode>();
            while(p!=null){
                q=p;
                if(!set.add(p)){
                    return q;
                }
                p=p.next;
            }
            return null;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

     

    解法二:Set集合优化

      因为它是每次p=p.next前都会判断一下是否存在,所以不需要提前赋值出去

    public class Solution {
        public ListNode detectCycle(ListNode head) {
            ListNode pos = head;
            Set<ListNode> visited = new HashSet<ListNode>();
            while (pos != null) {
                if (visited.contains(pos)) {
                    return pos;
                } else {
                    visited.add(pos);
                }
                pos = pos.next;
            }
            return null;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

     


  • 相关阅读:
    python读取vivo手机截图,将满屏图片文件移动别的路径
    Netty启动之后马上退出问题排查
    2022年高教社杯国赛C题 | 古代玻璃制品的成分分析与鉴别(Matlab实现)
    C语言时间操作详解
    迪萧科技有限公司邀您参观2024生物发酵展
    《山水归一全书》52页(双页版)PDF电子书
    数据仓库之BI
    LeetCode_二分搜索_中等_2594.修车的最少时间
    【Docker内容大集合】Docker从认识到实践再到底层原理大汇总
    Python入门教程之基本语法详解,收藏慢慢学~
  • 原文地址:https://blog.csdn.net/weixin_54217216/article/details/126061701