思路1:这道题如果就这么遍历下去,那么出现一个环就是死循环了,所以想到一个骚办法,也算是投机取巧吧,把遇到的每个数字都置INT32_MAX,在置之前先判断这个值是不是INT32_MAX,如果是则说明这是个环,如果不是,继续遍历下去;
所幸,数据里没并没有INT32_MAX,哈哈哈哈!!!

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {public:bool hasCycle(ListNode *head){ListNode* now=head;while(now!=NULL){if(now->val==INT32_MAX){return true;}now->val=INT32_MAX;now=now->next;}return false;}
};

思路1其实有点类似Hash法,这里的Hash法就是把指针所代表的地址作为参数,得到一个hash值再加入到集合中,每次加入之前先判断集合中是不是已存在,若已存在则说明存在环,若一直遍历结束,则说明不存在环;

思路2:快慢指针(双指针)法,快指针每次走两步,慢指针每次走一步;那么无环的情况下,快指针一定先到达终点;如果出现环,情况1:快指针回到慢指针之后的位置,那么快指针一定在某个时刻能追上慢指针,情况二:快指针回到慢指针之前的位置,那么快指针又会进入环,依次类推,总会回到慢指针后再追上慢指针;所以当快指针追上慢指针时,表示存在环;

简单地说就是:2 个人在环形跑道上赛跑,从同一个起点出发,一个跑得快,一个跑得慢,在某一时刻,速度快的必定会追上速度慢的,只要是跑道是环形的;

题目有一个很可爱的题解,标记一下:这是一个有趣的视频题解:快慢指针

class Solution {public:bool hasCycle(ListNode *head) {if(head == NULL || head->next == NULL){return false;}ListNode* slow = head;ListNode* fast = head->next;while(slow != fast){if(fast == NULL || fast->next == NULL){// 如果没有环,快指针会先到达结尾return false;}slow = slow->next;fast = fast->next->next;}return true;}
};

Leetcode每日一题:141.linked-list-cycle(环形链表)相关推荐

  1. leetcode python3 简单题141. Linked List Cycle

    1.编辑器 我使用的是win10+vscode+leetcode+python3 环境配置参见我的博客: 链接 2.第一百四十一题 (1)题目 英文: Given a linked list, det ...

  2. 141. Linked List Cycle 环形链表

    给定一个链表,判断链表中是否有环. 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引 ...

  3. LeetCode 141. Linked List Cycle (链表循环)

    Given a linked list, determine if it has a cycle in it. Follow up: Can you solve it without using ex ...

  4. LeetCode每日一题 141. 环形链表

    题目链接 思路 快慢指针 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ...

  5. [LeetCode] 141. Linked List Cycle 单链表判圆算法

    TWO POINTER 快指针速度2 , 慢指针速度1 相对速度1,有环必然相遇 public class Solution {public boolean hasCycle(ListNode hea ...

  6. Leetcode每日一题:147.insertion-sort-list(对链表进行插入排序)

    思路:因为链表的特性,插入排序无法从当前元素往前遍历,所以这里直接从头开始查找插入位置,分头部插入.中间插入和尾部插入: ListNode *insertionSortList(ListNode *h ...

  7. Leetcode每日一题:328.odd-even-linked-list(奇偶链表)

    思路:同时分两个子链表分别向后连接属于它们的节点,遇到NULL节点时将两者连接即可: class Solution {public:ListNode *oddEvenList(ListNode *he ...

  8. Leetcode每日一题:剑指offer22.lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof(链表中倒数第k个节点)

    思路:同上一道题,快慢指针问题: /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *nex ...

  9. Leetcode每日一题:83.remove-duplicates-from-sorted-list(删除排序链表中的重复元素)

    思路:两个指针pre和cur,用cur遍历链表,pre指向cur前面的非重复元素: class Solution {public:ListNode *deleteDuplicates(ListNode ...

  10. 141. Linked List Cycle

    欢迎fork and star:Nowcoder-Repository-github 141. Linked List Cycle 题目 Given a linked list, determine ...

最新文章

  1. python求平方根的代码_Python求平方根(附带源码)
  2. debian,ubuntu 安装mongodb 允许外网访问,修改端口,设置用户和密码
  3. 技术开发中一些名词解释
  4. [Android]乐Pad开发准备
  5. Django 中间件
  6. 动手写一个Remoting接口测试工具(附源码下载)
  7. 【C++】 C++标准模板库(六) Queue
  8. hibernate更新部分字段的几种方法
  9. WP8开发学习笔记动态修改启动时导航的第一个页面(如登录前启动页为LoginPage,登录后变为MainPage)...
  10. httpModule一些细节
  11. 不用找了,基于 Redis 的分布式锁实战来了
  12. PHP微信小程序生成带参二维码getwxacodeunlimit
  13. Smartbi的使用
  14. python脚本迁移数据库_Django 数据库迁移脚本
  15. DFX:面向产品生命周期的设计
  16. Tello 无人机 python 编程
  17. TouchGFX 中文字体添加(直入正题)
  18. Android Studio新手必读
  19. [系统安全] 二十二.PE数字签名之(下)微软证书漏洞CVE-2020-0601复现及Windows验证机制分析
  20. 实习生到公司第一天应该怎么快速上手

热门文章

  1. JavaScript引用数据类型
  2. C++STL-priority_queue
  3. request.getAttribute()和request.getParameter()区别
  4. python连接redis002
  5. 【设计模式】5、单例模式
  6. OPEN(SAP) UI5 学习入门系列之四:更好的入门系列-官方Walkthrough
  7. 利用navicat for mysql实现mysql数据库表结构复制
  8. [导入]正则表达式学习心得体会(3)(转)
  9. jq中使用promise封装ajax
  10. Tomcat系列(5)——Tomcat配置详细部分