zoukankan      html  css  js  c++  java
  • Linked List Cycle

     1   bool hasCycle(ListNode *head) {
     2         if(head==NULL)
     3             return false;
     4         ListNode *pBefore,*pLater;
     5         if(head->next)
     6             pBefore=head->next;
     7         else
     8             return false;
     9         pLater=head;
    10         while(pBefore)
    11         {
    12             if(pBefore->next==pLater)
    13                 return true;
    14             pBefore=pBefore->next;
    15             pLater=pLater->next;
    16         }
    17         return false;
    18     }

    Status: Time Limit Exceeded

    超时,速度一样的话,是不对的,画个图就能很清晰的看出来。

     1     bool hasCycle(ListNode *head) {
     2         if(head==NULL)
     3             return false;
     4         if(head->next==NULL)
     5             return false;
     6         ListNode *pFast,*pSlow;
     7         pFast=head->next;
     8         pSlow=head;
     9         while(pFast&&pSlow){
    10             if(pFast==pSlow)
    11                 return true;
    12             pFast=pFast->next->next;
    13             pSlow=pSlow->next;
    14         }
    15         return false;
    16     }

    Status: Runtime Error

    Last executed input:{1,2}, no cycle

    这个又是怎么了???

    分析,很不规范的分析,但大体意思是这么着,结合着错误提示看,

    slow=1,fast=2

    while(1&&2)

    fast!=slow

    fast=NULL->next;

    错了吧,就在这里错的哇

     1     bool hasCycle(ListNode *head) {
     2         if(head==NULL||head->next==NULL)
     3             return false;
     4         ListNode *pFast,*pSlow;
     5         pFast=head;
     6         pSlow=head;
     7         while(pFast&&pFast->next){
     8             pSlow=pSlow->next;
     9             pFast=pFast->next->next;
    10             if(pFast==pSlow)
    11                 return true;
    12         }
    13         return false;
    14     }

    AC

     1     bool hasCycle(ListNode *head) {
     2         if(head==NULL||head->next==NULL)
     3             return false;
     4         ListNode *pFast,*pSlow;
     5         pFast=head;
     6         pSlow=head;
     7         while(pFast->next){
     8             pSlow=pSlow->next;
     9             pFast=pFast->next->next;
    10             if(pFast==pSlow)
    11                 return true;
    12         }
    13         return false;
    14     }

    Status: Runtime Error

    Last executed input:{1,2}, no cycle

    我只是想省去一个判断信息:pFast&&pFast->next改成pFast->next

    结合着错误提示看看

    fast=1,slow=1

    while(2)

    slow=2;

    fast=NULL;

    while(NULL->next)

    又出错了吧

     1 public:
     2     bool hasCycle(ListNode *head) {
     3         if(head->next==NULL)
     4             return false;
     5         ListNode *pFast,*pSlow;
     6         pFast=head;
     7         pSlow=head;
     8         while(pFast&&pFast->next){
     9             pSlow=pSlow->next;
    10             pFast=pFast->next->next;
    11             if(pFast==pSlow)
    12                 return true;
    13         }
    14         return false;
    15     }

    第三行我把head==NULL给删了,呵呵,结果就

    Submission Result: Runtime Error

    Last executed input: {}, no cycle
  • 相关阅读:
    JSONP跨域的原理解析( 一种脚本注入行为)
    用Navicat_SSH 连接数据库服务器
    ng-repeat && ng-options的故事
    The different between ng-grid & ui-grid
    Web工作原理
    js操作cookies方法
    人生苦短,我用Python(目录)
    哈希算法
    数据结构
    算法入门
  • 原文地址:https://www.cnblogs.com/crane-practice/p/3608251.html
Copyright © 2011-2022 走看看