LeetCode 141. 环形链表
发布日期:2021-06-29 21:37:15 浏览次数:2 分类:技术文章

本文共 1459 字,大约阅读时间需要 4 分钟。

题目链接:

题目描述:
给定一个链表,判断链表中是否有环。

为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。

示例1:

输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。

在这里插入图片描述

示例2:

输入:head = [1,2], pos = 0输出:true解释:链表中有一个环,其尾部连接到第一个节点。

在这里插入图片描述

思路:这里提供两个方法。
法一:因为链表采用类似数组方式给出的,因此采用直接循环遍历的方式,实际上只需要用一个list或者set记录一下该节点是否出现过即可。

/** * Definition for singly-linked list. * class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { *         val = x; *         next = null; *     } * } */public class Solution {
public boolean hasCycle(ListNode head) {
HashSet
set=new HashSet
(); for(ListNode p=head;p!=null;p=p.next){
if(set.contains(p)) return true; set.add(p); } return false; }}

法二:采用快慢指针,初始都位于头节点,然后快指针走两步慢指针走一步,这样两个链表中有环必定快慢指针会在环上相遇。

代码:

/** * Definition for singly-linked list. * class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { *         val = x; *         next = null; *     } * } */public class Solution {
public boolean hasCycle(ListNode head) {
if(head==null||head.next==null) return false; ListNode fastNode=head; ListNode slowNode=head; while((fastNode.next!=null)&&(fastNode.next.next!=null)){
fastNode=fastNode.next.next; slowNode=slowNode.next; if(fastNode==slowNode){
return true; } } return false; }}

转载地址:https://dh-butterfly.blog.csdn.net/article/details/108444478 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:LeetCode 142. 环形链表 II
下一篇:剑指 Offer 52. 两个链表的第一个公共节点

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月10日 23时17分23秒