/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *detectCycle(ListNode *head) {
if(head==NULL)
return NULL; ListNode *fast_node=head;
ListNode *slow_node=head;
do
{
if(slow_node->next!=NULL)//慢指针,一次挪一位
slow_node=slow_node->next;
else
return NULL; if(fast_node->next!=NULL)//快指针,一次挪两位
fast_node=fast_node->next;
else
return NULL;
if(fast_node->next!=NULL)//懒的想花里胡哨的方法了
fast_node=fast_node->next;
else
return NULL;
}while(slow_node!=fast_node);//只要有环一定会有两个指针相遇的情况 int num_cycle=;//看看环中多少个节点
do
{
fast_node=fast_node->next;
num_cycle++;
}while(fast_node!=slow_node); fast_node=head;//让fast_node先走num_cycle-1步
slow_node=head;
while(num_cycle!=)//注意这里是因为指针之差是节点数-1
{
fast_node=fast_node->next;
num_cycle--;
} while(fast_node->next!=slow_node)//二者并行前进,直到fast_node是尾节点,此时slow_node为环起点
{
fast_node=fast_node->next;
slow_node=slow_node->next;
} return slow_node;
}
};

分析:

这个题也见过,剑指offer,为了检测这个点,要分三步走:

先检测有环不,并检测环中任意节点;

再检测环中个数;

最后让一个指针先走一定步数,然后判断两个指针什么时候处于环的起点终点。

leecode第一百四十二题(环形链表II)的更多相关文章

  1. leecode第一百四十八题(排序链表)

    class Solution { public: void sort_list(ListNode* head1, ListNode* head2,int len)//在原链表上进行排序 { ListN ...

  2. leecode第一百四十六题(LRU缓存机制)

    class LRUCache { private: unordered_map<int, list<pair<int,int>>::iterator> _m; // ...

  3. leecode第六十二题(不同路径)

    class Solution { public: int uniquePaths(int m, int n) { ||n==) ; vector<vector<int>> pa ...

  4. 《剑指offer》第二十二题(链表中倒数第k个结点)

    // 面试题22:链表中倒数第k个结点 // 题目:输入一个链表,输出该链表中倒数第k个结点.为了符合大多数人的习惯, // 本题从1开始计数,即链表的尾结点是倒数第1个结点.例如一个链表有6个结点, ...

  5. 【leetcode 简单】 第三十五题 环形链表

    给定一个链表,判断链表中是否有环. 进阶: 你能否不使用额外空间解决此题? /** * Definition for singly-linked list. * struct ListNode { * ...

  6. 【leetcode 简单】 第一百一十二题 重复的子字符串

    给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超过10000. 示例 1: 输入: "abab" 输出: True 解释 ...

  7. 【leetcode 简单】 第一百四十六题 最长和谐子序列

    和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1. 现在,给定一个整数数组,你需要在所有可能的子序列中找到最长的和谐子序列的长度. 示例 1: 输入: [1,3,2,2,5,2,3,7] ...

  8. Leetcode 142题 环形链表 II(Linked List Cycle II) Java语言求解

    题目描述: 给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 p ...

  9. Java实现 LeetCode 142 环形链表 II(二)

    142. 环形链表 II 给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始 ...

随机推荐

  1. AdminLTE模板使用

    AdminLTE介绍: AdminLTE是一款建立在bootstrap和jquery之上的开源的模板主题工具,它提供了一系列响应的,可重复使用的组件,并内置了多个模板页面;同时自适应多种屏幕分辨率,兼 ...

  2. Urllib库及cookie的使用

    https://blog.csdn.net/pipisorry/article/details/47905781

  3. 11: python递归

    1.1 递归讲解 1.定义 1. 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. 2.递归特性 1. 必须有一个明确的结束条件 2. 每次进入更深一层递归时,问题 ...

  4. android 文本框不获取焦点的两种方式

    当进入一个页面以后,我们不希望EditText获取焦点自动弹出软键盘,占据大半个屏幕. 方法一 让LinearLayout率先获取焦点,代码如下: <LinearLayout android:f ...

  5. phpstudy手动把mysql数据库从5.5.56升级到5.6.41

    查看mysql版本: mysql> select version(); 1.关闭mysql,把原来的D:/phpStudy/PHPTutorial/mysql改名为MySQL_5.5.53作为备 ...

  6. 尚硅谷面试第一季-08Spring支持的常用数据库事务传播属性和事务隔离级别

    目录结构: 关键代码: BookShopServiceImpl.java package Spring支持的常用数据库事务传播属性和事务隔离级别.tx.service.impl; import Spr ...

  7. 为什么说 HashMap 是非线程安全的?

    我们在学习 HashMap 的时候,都知道 HashMap 是非线程安全的,同时我们知道 HashTable 是线程安全的,因为里面的方法使用了 synchronized 进行同步. 但是 HashM ...

  8. tp框架中的一些疑点知识-2

    tp中有三种常量: 预定义常量, 这个设置后不会随环境的改变而改变的,比如'URL_MODEL' => 1 注意是 model, 不是 url_mode 路径常量, 也不会随环境的改变而改变的, ...

  9. MySQL 日期时间函数

    目录 datetime和timestamp区别: timestamp类型字段特殊性: Mysql获取日期时间函数: now() curdate() curtime() Extract() last_d ...

  10. (转)Redis & EhCache

    (二期)6.redis与ehcache综合讲解 [课程六]ehcache简介.xmind0.1MB [课程六]redis的高可用.xmind0.1MB [课程六]redis的...结构.xmind0. ...