LeetCode Linked List Cycle 解答程序

来源:互联网 发布:app交互流程图 软件 编辑:程序博客网 时间:2024/06/03 06:34

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?

错误解法。因为Cycle可能出现在Link的中间的,所以需要检查其中间Nodes。

bool hasCycle(ListNode *head) {// IMPORTANT: Please reset any member data you declared, as// the same Solution instance will be reused for each test case.if(head == NULL)return false;ListNode *cur = head;while(cur != NULL){cur = cur->next;if(cur == head)return true;}return false;}


正确解法:

class Solution {public:bool find(ListNode *head, ListNode *testpNode){ListNode *p = head;while (p != testpNode->next){if(p == testpNode)return false;p = p->next;}return true;}bool hasCycle(ListNode *head) {// IMPORTANT: Please reset any member data you declared, as// the same Solution instance will be reused for each test case.if(head == NULL)return false;ListNode *cur = head;while(cur != NULL){if(find(head, cur))return true;cur = cur->next;}return false;}};


 

更新I的O(n)算法:

//2014-2-19 updatebool hasCycle(ListNode *head) {ListNode *fast = head;ListNode *slow = head;while (fast){slow = slow->next;fast = fast->next;if (fast) fast = fast->next;if (fast && slow == fast) return true;}return false;}



原创粉丝点击