首页 > 其他分享 >141.环形链表

141.环形链表

时间:2023-03-23 14:57:42浏览次数:36  
标签:head 141 环形 fast next 链表 null 节点

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

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

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

方法一:快慢指针 龟兔赛跑问题

public class Solution {
    public boolean hasCycle(ListNode head) {
        if (head==null||head.next==null){
            return false;
        }
        ListNode slow=head;
        ListNode fast=head.next;
        while (fast.next!=null&&fast.next.next!=null){
            if (fast==slow){
                return true;
            }
            slow=slow.next;
            fast=fast.next.next;
        }
        return false;
    }
}

方法二:HashSet
遍历所有节点,每次遍历到一个节点时,判断该节点此前是否被访问过。
使用哈希表来存储所有已经访问过的节点。每次我们到达一个节点,如果该节点已经存在于哈希表中,则说明该链表是环形链表,否则就将该节点加入哈希表中。重复这一过程,直到我们遍历完整个链表即可。

public class Solution {
    public boolean hasCycle(ListNode head) {
        if (head==null||head.next==null)
            return false;
        HashSet<ListNode> set = new HashSet<>();
        while (head!=null&&head.next!=null){
            if (!set.add(head)){
                return true;
            }
            head=head.next;
        }
        return false;
    }
}

标签:head,141,环形,fast,next,链表,null,节点
From: https://www.cnblogs.com/crazyfish/p/17247428.html

相关文章

  • JZ6 从尾到头打印链表
      链表是存储数据的一种方式,由于内存不是连续的,因此访问只能从表头访问表尾。本题需要从尾部到头打印链表,只能借助特殊的数据结构输出,但是访问顺序不会因此改变。首先......
  • 论单向链表有序插入方案
    0.思考单向链表有序插入,插入点分为这样几个地方:当前链表为空,被插入节点是第一个节点被插入节点作为头结点被插入节点在中间被插入节点在尾部那么按照这样的步骤一......
  • 单链表OJ题解析1
    1.移除链表元素题目链接题目描述 解题思路这道题较好的解法是创建一个新链表,把不等于val的节点链接到一起,然后返回新链表的头结点structListNode*removeEle......
  • 链表操作-leetcode23-删除倒数第几个节点
    给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。示例1:示例2:输入:head=[1],n=1输出:[]示例3:输入:head=[1,2],n=1输出:[1]提示:链表中结......
  • AtCoder Beginner Contest 141
    AtCoderBeginnerContest141D-PowerfulDiscountTickets贪心+堆#include<bits/stdc++.h>#definelllonglongusingnamespacestd;constintN=1e5+5;......
  • LeetCode|876. 链表的中间结点
    题目链接:876.链表的中间结点难度简单829收藏分享切换为英文接收动态反馈给你单链表的头结点head,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中......
  • c++链表记录
    ListNode*pre=NULL;//定义一个空节点ListNode*tmp;//定义一个空的临时节点,此时tmp==NULL ListNode*cur=head;//定义一个等于节点head的节点 ListNode*du......
  • 链表知识点
    链表知识点总结链表简介链表:是由一种一个或多个指针域和数据域组成的特殊数据结构链表类型单链表单链表中的指针域指向下一个节点双链表双链表中有两个指针域,一个......
  • 数据结构-->带头双向循环链表--->优化
    好了,各位老铁!!现在开始本期讨论话题:<--头删数据----头插数据-->直接上手代码:头文件“List.h”#include<stdio.h>#inculde<stdlib.h>//扩容函数malloc库#include<asse......
  • algrothm_reverse(algrothm+round)【反转链表】
    ......