标签:双指针
题目:
Given a linked list, determine if it has a cycle in it.
思路分析:
利用快慢指针slow,fast。 slow指针每次走一步,fast指针每次走两步,倘若存在环,则slow和fast必定在某一时刻相遇。
C++参考代码:
/**
* 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)
{
if (!head) return false;
ListNode *slow = head;
ListNode *fast = head->next;
while (fast && fast->next)
{
if (slow == fast) return true;
slow = slow->next;
fast = fast->next->next;
}
return false;
}
};
另外一种写法:
class Solution
{
public:
bool hasCycle(ListNode *head)
{
if (!head) return false;
ListNode *slow = head;
ListNode *fast = head;
while (fast && fast->next)
{
slow = slow->next;
fast = fast->next->next;
if (slow == fast) return true;
}
return false;
}
};
C#参考代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* public int val;
* public ListNode next;
* public ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution
{
public bool HasCycle(ListNode head)
{
if (head == null) return false;
ListNode slow = head;
ListNode fast = head;
while (fast != null && fast.next != null)
{
slow = slow.next;
fast = fast.next.next;
if (slow == fast) return true;
}
return false;
}
}
标签:双指针
原文地址:http://blog.csdn.net/theonegis/article/details/44886333