zoukankan      html  css  js  c++  java
  • [LeetCode]Linked List Cycle

    原题链接:http://oj.leetcode.com/problems/linked-list-cycle/

    题意描述:

    Given a linked list, determine if it has a cycle in it.

    Follow up:
    Can you solve it without using extra space?

    题解:

      判断一个单链表中是否有环,这是一道典型的快慢指针的题,具体概念参见百度:http://baike.baidu.com/link?url=6vrn7yMJjWonSHrzGNLZA16JoJZxrLkFuRtJH3oP3PHCBakSKKM2UQH-5xtM9evvEGE385f7Ry9lqsn_Q0AKua

      其实理解起来很简单,就是设置两个指针,步长不同,形成一个“追赶”另一个的情形,如果两个相遇了,那么肯定有环,如果有一个变成了NULL(肯定是快的那个),那么就不存在环。 

      当然也有其他解法,比如比较到达某一顶点的步数,步数多的,肯定是绕了环,其实本质都差不多。

      这道题还有一个加强版,假如存在环,找到环的起点。http://www.cnblogs.com/codershell/p/3600958.html

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     ListNode *next;
     6  *     ListNode(int x) : val(x), next(NULL) {}
     7  * };
     8  */
     9 class Solution {
    10 public:
    11     bool hasCycle(ListNode *head) {
    12         if(head==NULL)return false;
    13         ListNode*p = head,*q = head;
    14         while(p!=NULL && q!=NULL){
    15             p = p->next;
    16             q = q->next;
    17             if(q!=NULL)
    18                 q = q->next;
    19             else
    20                 return false;
    21             
    22             if(p==q)
    23                 return true;
    24             
    25         }
    26         return false;
    27     }
    28 };
    View Code
  • 相关阅读:
    记录一次阻塞引发的系统超时
    2015年读书清单
    循序渐进的敏捷-每日例会
    循序渐进的敏捷-交叉测试
    对一次系统上线的思考-走出“舒适区”
    单点登录(SSO)系统的总结
    对一个同事项目的思考和总结
    关于福建出差的总结
    由错误处理引发的联想-防御式编程
    关于日志记录的总结
  • 原文地址:https://www.cnblogs.com/codershell/p/3600100.html
Copyright © 2011-2022 走看看