Given a linked list, determine if it has a cycle in it.
Follow up:
Can you solve it without using extra space?
/** * 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) { /* 1. 空链表不成环 2. 一个节点自环 3. 一条链表完整成环 */ if(head==NULL)return false; if(head->next==NULL)return false; if(head->next==head)return true; ListNode* y=head->next; ListNode* x=head->next->next; while(x!=NULL && y!=NULL) { x=x->next; if(x==NULL)break; x=x->next; y=y->next; if(x==y)break; } return x==y; } };标准做法是使用两个指针,一个每次往前走2步,一个每次往前走1步,如果两个指针相遇,即说明链表有环,时间复杂度为O(N),空间复杂度为O(1)。
LeetCode--Linked List Cycle,布布扣,bubuko.com
原文地址:http://blog.csdn.net/greenapple_shan/article/details/25836303