标签:div 链表是否有环 one show isp com img turn return
一、快慢指针: 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; } };
标签:div 链表是否有环 one show isp com img turn return
原文地址:https://www.cnblogs.com/dzzy/p/12253675.html