zoukankan      html  css  js  c++  java
  • 判断链表是否有环

    思路:

    用两个指针fast和slow指针(快慢指针),开始的时候指针都指向链表的Head节点,然后在每一步的操作中slow向前走一步:slow = slow.Next,
    而fast就向前走两步 :fast = fast.Next.Next;
    快指针fast由于比慢指针slow快,所以fast一定比slow先进入环,慢指针slow后进入环,两个指针必定会相遇。如果不存在环,则快指针会先行到达链表的尾部变为None。

    复杂度:

    时间复杂度:需要循环N次,所以时间复杂度未O(n);
    空间复杂度:除了链表本身需要的内存空间外,并不需要其他的内存空间地址,所以空间复杂度为O(1);

       public bool CycleList()
            {
                //链表为空,或是单结点链表只有一个节点
                if (Head == null || Head.Next == null)
                {
                    return false;
                }
    
                Node<T> temp = Head;
                Node<T> fast = temp;
                Node<T> slow = temp;
    
                while (fast.Next != null && fast.Next.Next != null)//当快指针与慢指针相遇时
                {
                    fast = fast.Next.Next;
                    slow = slow.Next;
    
                    if (slow == fast)
                    {
                        return true;
                    }
                }
    
                return false;
            }

    https://www.jianshu.com/p/4ffee16130be

  • 相关阅读:
    kail
    scp命令
    搭建LNMP
    PHP7.3.2安装
    nginx的安装
    CentOS7部署NFS
    Linux使用mailx通过外部smtp发邮件
    kickstart自动化安装
    centos7下单用户模式,救援模式的应用以及虚拟机下的克隆
    putty和xsheel远程连接centos7
  • 原文地址:https://www.cnblogs.com/dingpeng9055/p/11712123.html
Copyright © 2011-2022 走看看