用快慢指针法,慢指针一次走一步,快指针一次走两步,如果有环必定相遇
这里给出C++和Python 版
Python:
""" Definition of ListNode class ListNode(object): def __init__(self, val, next=None): self.val = val self.next = next """ class Solution: """ @param head: The first node of the linked list. @return: True if it has a cycle, or false """ def hasCycle(self, head): # write your code here if head is None: return False if head.next is None: return False slow = head.next fast = head.next if fast.next is not None: fast = fast.next while (slow.next is not None) and (fast.next is not None): if slow == fast: return True slow = slow.next fast = fast.next if fast.next != None: fast = fast.next return False
c++
/** * Definition of ListNode * class ListNode { * public: * int val; * ListNode *next; * ListNode(int val) { * this->val = val; * this->next = NULL; * } * } */ class Solution { public: /** * @param head: The first node of linked list. * @return: True if it has a cycle, or false */ bool hasCycle(ListNode *head) { // write your code here if (head == NULL) return false; if (head->next ==NULL||head->next->next==NULL) return false; ListNode *p = head ->next; ListNode *q = head ->next->next; while(p->next&&q->next) { if(p==q){ return true; } p = p->next; q = q->next; if (q->next) q=q->next; } return false; } };
时间复杂度O(N) 常数的空间复杂度
时间: 2024-10-27 01:31:06