题意:不使用额外的空间,判断一个链表是否有环。
解题:使用两个指针walker和runner,walker每次向后移动一个节点,runner每次向后移动两个节点,若walker或runner或runner->next等于空指针NULL,说明该链表没有环。若有walker==runner,那说明有环。
复杂度:时间复杂度O(N),空间复杂度O(1)。
class Solution {
public:
bool hasCycle(ListNode *head) {
ListNode* walker(head);
ListNode* runner(head);
while (walker && runner && runner->next) {
walker = walker->next;
runner = runner->next->next;
if (walker == runner)
return true;
}
return false;
}
};