快慢指针及其应用

原创 2016年08月30日 09:36:49

  快慢指针,顾名思义就是设置两个指针,在同一个链表中不同步的游走。快指针每次走两步,慢指针每次走一步,如果链表不是循环链表,那么快指针会始终在慢指针前面,如果链表存在环路,那么当进入环中以后,由于快指针移动较快,它与慢指针总会有相遇的时刻。就如同我们在环形跑道上跑步一样,速度快的人在跑若干圈之后会再次追上速度慢的人,再次相遇。因此本节我们介绍如何利用快慢指针来判断一个链表是否存在环并返回环开始的结点。
  从上面的分析我们知道要判断是否存在环是比较容易的,那么如何找到并返回环开始的结点呢,具体请看这篇文章的数学推导(参考),那么最终的结论是:当快慢指针第一次在环内的某一结点处相遇时,令其中一个指针指向链表的头结点,然后二者同步移动,每次都只移动一步,最终再次相遇的地方即为环的开始结点。

node* loopStart(node* head)
{
    if(!head)
        return NULL;
    node* slow = head;
    node* fast = head;
    while(fast && fast->next)
    {
        fast = fast->next->next;
        slow = slow->next;
        if(fast == slow)
            break;
    }
    if(!fast || !fast->next)
        return NULL;
    fast = head;
    while(fast != slow)
    {
        fast = fast->next;
        slow = slow->next;
    }
    return fast;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

【面试题】-判断单链表是否有环并找到环入口(快慢指针)

快慢指针 所谓的快慢指针的快慢是指指针向前移动的步长。比如在单链表中,快指针每次向前移动2个步长,慢指针则每次向前移动1个步长。 单链表环 单链表有环的定义是链表的尾节点指向了链表中间的某个...
  • zwhlxl
  • zwhlxl
  • 2015年05月14日 21:57
  • 1991

证明利用快慢指针寻找有环单链表中环的起点算法

问题:给定一个有环单链表,找到链表中环的起点,也就是说,找到下图中的单链表中Join点: (本图来源于http://www.cnblogs.com/xudong-bupt/p/3667729.h...
  • l294265421
  • l294265421
  • 2016年01月07日 20:39
  • 1577

为什么用快慢指针检测链表是否有环的时候,快指针的步长选择的是2,而不是3,4,5?

1. 快慢指针的应用 2. 步长的选择 3. 其他需要考虑的问题
  • xgjonathan
  • xgjonathan
  • 2014年01月10日 11:40
  • 1054

快慢指针应用(二)——链表排序

使用快慢指针对链表里按内容大小排序:源代码如下: #include #include typedef struct student { int num; struct student *nex...
  • yinshitaoyuan
  • yinshitaoyuan
  • 2016年08月09日 17:41
  • 216

快慢指针的概念及其应用

快慢指针的概念及其应用
  • tutu_CRAYON
  • tutu_CRAYON
  • 2017年07月23日 19:05
  • 133

快慢指针在算法题上的应用

最近在刷leetcode oj,在做题过程中发现有很多题目的解法里都用到了
  • guyuqinggu
  • guyuqinggu
  • 2014年09月23日 18:22
  • 290

快慢指针应用(一)

快慢指针中的快慢指的是移动的步长,即每次向前移动速度的快慢。例如可以让快指针每次沿链表向前移动2,慢指针每次向前移动1次。 应用一:判断单链表是否为循环链表让快慢指针从链表头开始遍历,快指针向前移动两...
  • yinshitaoyuan
  • yinshitaoyuan
  • 2016年08月09日 17:14
  • 312

快慢指针的实现

  • 2017年03月06日 22:03
  • 939B
  • 下载

数据结构--快慢指针法找出链表中间元素

  • 2017年07月18日 09:38
  • 1KB
  • 下载

Java数据结构约瑟夫问题和腾讯面试题快慢指针找出中间节点

约瑟夫问题:据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个...
  • u014071669
  • u014071669
  • 2014年11月02日 22:05
  • 770
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:快慢指针及其应用
举报原因:
原因补充:

(最多只允许输入30个字)