当前位置:网站首页>141.环形链表

141.环形链表

2022-07-23 02:46:00 ZNineSun

打卡!!!每日一题

今天给大家分享一道链表类型的题目,题目很简单,主要是处理的方法,本文主要有两道题,带着大家由第一道题过渡到第二道题目。

题目1:141.环形链表

题目描述:

给你一个链表的头节点 head ,判断链表中是否有环。

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

如果链表中存在环 ,则返回 true 。 否则,返回 false 。

题目示例:
在这里插入图片描述

我们简单的分析一下这道题,题目意思很简单,就是让你判断是否存在环,我们的做法也很简单,将我们遍历的过的结点保存,一旦发现某个结点的Next被访问过,说明有环,如果链表遍历结束说明没有环。

遍历结束的条件:

  • 1.遍历结束,即结点的next为空。
  • 2.遍历到已经被访问过的结点。
    public boolean hasCycle(ListNode head) {
    
        if(head==null)return false;
        List<ListNode>list=new ArrayList<>();
        while(!list.contains(head)&&head!=null){
    
            list.add(head);
            head=head.next;
        }
        if(head==null){
    
            return false;
        }else return true;
    }

是不是很简单,我们再接着向下去思考一道进阶题。

题目2:142.环形链表2

题目描述:

给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。

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

不允许修改 链表。

题目示例:
在这里插入图片描述

在这里插入图片描述

这道题和 上一道题基本如出一辙,唯一不同就是需要我们返回链表开始入环的第一个节点。

这道题的关键还是要找到哪一个结点的next是被访问过的,一旦找到,我们直接return即可。

    public ListNode detectCycle(ListNode head) {
    
        if(head==null||head.next==null)return null;
        List<ListNode>list=new ArrayList<>();
        while(!list.contains(head)&&head!=null){
    
            list.add(head);
            if(list.contains(head.next)){
    
                return head.next;
            }
            head=head.next;
        }
        return null;
    }
原网站

版权声明
本文为[ZNineSun]所创,转载请带上原文链接,感谢
https://blog.csdn.net/zhiyikeji/article/details/125931686