首页 > 其他分享 >[LeetCode Hot 100] LeetCode141. 环形链表

[LeetCode Hot 100] LeetCode141. 环形链表

时间:2023-12-05 12:11:05浏览次数:32  
标签:LeetCode141 slow ListNode fast next 链表 Hot null 指针

题目描述

思路:快慢指针

  • slow指针:每次移动一个节点
  • fast指针:每次移动两个节点
  • 如果链表中存在环,fast指针最终会在某一时刻追上slow指针,这是由于移动速度快的fast指针会在某个时刻绕圈并追上速度慢的slow指针
  • 条件 fast != null && fast.next != null 保证了在每一步迭代中,fast 和 fast.next 都不为 null。这样做有两个目的:
    1. 防止在访问fast.next时出现 NullPointerException,因为如果 fast 或 fast.next 是 null,说明链表已经遍历结束,不存在环。
    2. 通过fast.next != null条件,避免了fast.next.next操作中fast.next为null的情况,因为如果 fast.next是null,则无法再访问 fast.next.next。

方法一:

/**
 * 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) {
        ListNode slow = head, fast = head;
        while (fast != null && fast.next != null) {
            fast = fast.next.next;
            slow = slow.next;
            if (fast == slow) return true;
        }
        return false;
    }
}

这里注意一下while的条件。
fast = fast.next.next;
首先fast != null,保证fast.next有意义。
fast.next != null,保证fast.next.next有意义。

标签:LeetCode141,slow,ListNode,fast,next,链表,Hot,null,指针
From: https://www.cnblogs.com/keyongkang/p/17876939.html

相关文章

  • [LeetCode Hot 100] LeetCode3. 无重复字符的最长子串
    题目描述思路:滑动窗口定义需要维护的变量//1.定义需要维护的变量intmax_len=0;Map<Character,Integer>hashmap=newHashMap<>();窗口不满足条件,窗口收缩。窗口不是固定大小所以用while//4.窗口不满足条件:窗口收缩//满足这个条件说明有重复元素//这......
  • [LeetCode Hot 100] LeetCode438. 找到字符串中所有字母异位词
    题目描述思路:滑动窗口模板需要维护的变量://1.用于存放结果List<Integer>res=newArrayList<>();//2.定义需要维护的变量:根据题意可知是一个哈希表Map<Character,Integer>map=newHashMap<>();Map<Character,Integer>hashmap_p=newHashMap<>();for(c......
  • 链表算法笔记
    ​ 类型:单链表、双链表、循环链表操作:删除节点、添加节点        在删除节点时,C++里最好是再手动释放所删除的节点,释放内存,但是如Java、Python等语言,它们有自己的内存回收机制,就不需要手动释放了。使用虚拟头节点的原因使第一个节点和其他节点的增加和删除操作统一,......
  • 内核链表
    内核链表在很多嵌入式的代码中都有用到,因为这个链表很好用,并且代码的统一性会增强代码的可读性,因此这里简单记录一下内核链表的使用,首先是库文件,这里也就是从内核中获取的,下面的代码做了一点注释。#ifndef_LINUX_LIST_H#define_LINUX_LIST_H//include/linux/types.hstruct......
  • [LeetCode Hot 100] LeetCode1. 两数之和
    题目描述思路:如果哈希表存在target-nums[i],则返回索引下标i和对应的key值(可以按任意顺序返回答案)如果哈希表中不存在target-nums[i],则存入nums[i]和对应的索引值方法一:哈希表classSolution{publicint[]twoSum(int[]nums,inttarget){//1.存放......
  • 链表算法总结
    知识概览链表包括单链表和双链表,这里讨论算法题中的链表。为了考虑算法题中对于时间效率的要求,链表通常是用数组模拟成静态链表的形式,速度快。单链表可以用来写邻接表(包括n个链表),邻接表可以存储树和图,最短路问题、最小生成树问题、最大流问题都可以用邻接表来存储。双链表用来......
  • 链表为什么适合归并排序而不是快速排序?
    链表适合归并排序而不是快速排序的原因主要有以下几点:内存访问模式:快速排序的效率主要来源于引用的局部性,计算机硬件在这里得到了优化,因此访问彼此相邻的内存位置往往比访问分散在内存中的内存位置更快。然而,链表单元格经常分散在内存中,所以访问相邻的链表单元格没有局部性......
  • [LeetCode Hot 100] LeetCode15. 三数之和
    题目描述思路特判:对于数组长度为n,如果数组为null或者数组长度小于3,返回[]。对数组进行排序。遍历排序后的数组:若nums[i]>0nums[i]>0nums[i]>0:因为已经排序好,所以后面不可能有三个数加和等于000,直接返回结果。对于重复元素:跳过,避免出现重复解。令左指针L=i+1L=i+1L=i+......
  • [LeetCode Hot 100] LeetCode160. 相交链表
    题目描述思路方法一:/***Definitionforsingly-linkedlist.*publicclassListNode{*intval;*ListNodenext;*ListNode(intx){*val=x;*next=null;*}*}*/publicclassSolution{publicListNo......
  • Leetcode刷题day4-链表.交换.删除.相交.环
    24.两两交换链表中的节点24.两两交换链表中的节点-力扣(LeetCode)给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(只能进行节点交换)。示例1:输入:head=[1,2,3,4]输出:[2,1,4,3]示例2:输入:head=[]输出:[......