leecode第一百四十二题(环形链表II)
2024-10-19 06:25:40
/**
* 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,为了检测这个点,要分三步走:
先检测有环不,并检测环中任意节点;
再检测环中个数;
最后让一个指针先走一定步数,然后判断两个指针什么时候处于环的起点终点。
最新文章
- C#——传值参数(1)
- markdown简要说明源码
- 去掉mac终端里面hostname提示处的bogon
- UITableViewCell分割线左边部分缺少一些的解决方法
- 关于表格前面checkbox复选框不打勾的问题
- 【D3.V3.js系列教程】--(十四)有路径的文字
- Intent数据传递
- MTK MOTA升级步骤
- var dataObj=eval(";(";+data+";)";);//转换为json对象(解决在ajax返回json格式数据的时候明明正确的获取了返回值但是却就是进不去success方法的问题。格式错误)
- python 练完这些,你的函数编程就ok了
- aop 幂等验证(二)
- DWM1000 巧用Status 快速Debug
- 20165235 祁瑛 2018-4 《Java程序设计》第八周学习总结
- [Machine Learning][The Analytics Edge][Predicting Earnings from Census Data]
- duilib进阶教程 -- 在MFC中使用duilib (1)
- was控制台误禁用后的恢复启用办法
- Linux创建桥接网络
- .gitignore中添加的某个忽略文件并不生效
- Java入门:绘制简单图形
- python入门篇之介绍和流程控制(一)
热门文章
- css显示display、可见性visibility、定位position、对齐
- GitHub使用笔记2:github常用操作
- v-on事件绑定指令
- org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout() mybatis和spring-mybatis版本不匹配问题
- 记一次gitlab添加用户收不到邮件的解决办法
- VC++ 利用PDB和dump文件定位问题并进行调试
- Mysqldump 参数大全
- 数组中的元素 增加push用法 unshift() 方法 和减少pop() 方法 shift() 和其他位置增删 splice() 方法 join() 方法 reverse() 方法 sort() 方法
- 没有使用Material组件
- Windows操作系统下安装Ubuntu虚拟机