算法复习:双指针(对撞指针快慢指针)
Posted dzzy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法复习:双指针(对撞指针快慢指针)相关的知识,希望对你有一定的参考价值。
一、快慢指针: leedcode 142. 环形链表 II
快慢指针的思想是设置慢指针slow和快指针fast,slow每次走一步,fast每次走两步,如果有环fast指针和slow指针必然相遇,相遇时
定义新的指针p从head开始和slow从当前位置起每次都走一步,直到相遇,相遇的位置就是环的入口。
class Solution { public: ListNode *detectCycle(ListNode *head) { int lable=0; struct ListNode *slow,*fast,*pp; if(head==NULL) return NULL; if(head->next==NULL) return NULL; slow=head->next; if(slow->next==NULL) return NULL; fast=slow->next; while(slow!=fast)// 步骤一:使用快慢指针判断链表是否有环 { if(fast->next==NULL) { lable=1; break; } fast=fast->next;//快指针走两步 if(fast->next==NULL) { lable=1; break; } fast=fast->next; slow=slow->next;//慢指针走一步 } if(lable==1) return NULL; pp=head; while(pp!=slow)// 步骤二:若有环,找到入环开始的节点 { pp=pp->next; slow=slow->next; } return pp; } };
以上是关于算法复习:双指针(对撞指针快慢指针)的主要内容,如果未能解决你的问题,请参考以下文章