zoukankan      html  css  js  c++  java
  • “快指针”与“慢指针”

     有时候处理链表相关问题的时候,定义“快指针”和“慢指针“的方法有时候会极大地提高时间效率。下面是常见的几种使用这个方法的情况。假设不考虑异常输入的情况。

    判断一个链表是否有环

      定义两个指针,快指针步长为2,慢指针步长为1.同时从链表头开始出发。如果链表中有环那么他们必然相遇。

    求链表中倒数第k个结点

      假设链表长度为n,那么我们轻松得出这些结论:链表中的倒数第k个结点也就是正数第n-(k-1)个结点。所以我们只需要正向的让指针走n-k次,那么指针停留的结点便是倒数第k个结点。走完这个链表需要走的步长是n-1。

      我们定义两个指针,快指针先出发,走k-1步。此时它停在正数第k个结点上。慢指针也开始从链表头出发。两个指针步长都为1,走到快指针为NULL为止。快指针停止时他走的第二段路的长度就是慢指针的长度:(n-1)-(k-1)= n-k.根据第一段的推导可知此致慢指针的指向便是倒数第k个结点。

    求链表的中间结点

      这个比较简单。也是定义两个指针,快指针步长为2,慢指针步长为1。同时从head出发,当快指针为NULL时,慢指针就停在中间结点了。

  • 相关阅读:
    android 管理wifi
    andriod 剪贴板操作
    andriod绘制图形
    andriod读写XML
    androd 获得wifi列表
    一个小时内学习SQLite数据库
    Android 使用SQLite本地数据库
    Android可伸缩列表ExpandableListView
    三甲医院涉医疗反腐,今年已有 149 位被查!
    2015各地区顶尖中学排行榜
  • 原文地址:https://www.cnblogs.com/seer/p/4667231.html
Copyright © 2011-2022 走看看