码迷,mamicode.com
首页 > 其他好文 > 详细

Linked List Cycle(11)

时间:2014-11-10 23:15:29      阅读:289      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   sp   for   div   on   log   

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

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

怎样判断一个链表之中是否有环?可以利用快慢指针的方法。定义两个指针fast和slow,两者都是从head出发,fast指针每次比slow多走一位。如果两个指针相遇了,很明显,链表中一定有环。

要注意一下循环的边界条件。什么时候停止循环,得出链表中没有环的结论。快指针走得快,当其指向为null时说明走到了终点,这没有错。但是,请注意还有一个停止循环的条件,那就是fast的下个指针指向为null时,也会造成循环结束。首先,如果fast->next为null的话,那么fast->next->next就没有意义了。而且,如果fast->next为null也能够说明链表中没有环。

上代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    bool hasCycle(ListNode *head) {
        ListNode *fast,*slow;
        fast=slow=head;
        while(fast&&fast->next){
            slow=slow->next;
            fast=fast->next->next;
            if(fast==slow)
                return true;
        }
        return false;
    }
};

 

Linked List Cycle(11)

标签:style   blog   io   color   sp   for   div   on   log   

原文地址:http://www.cnblogs.com/zhoudayang/p/4088442.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!