码迷,mamicode.com
首页 > 编程语言 > 详细

算法复习:双指针(对撞指针、快慢指针)

时间:2020-02-02 22:02:24      阅读:127      评论:0      收藏:0      [点我收藏+]

标签: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;
    }
};
leedcode 142

 

算法复习:双指针(对撞指针、快慢指针)

标签:div   链表是否有环   one   show   isp   com   img   turn   return   

原文地址:https://www.cnblogs.com/dzzy/p/12253675.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!