LeetCode141 环形链表
给定一个链表,判断链表中是否有环。
进阶:
你能否不使用额外空间解决此题?
//章节 - 链表 //二、双指针技巧 //1.环形链表 /* 算法思想: 想象一下,有两个速度不同的跑步者。如果他们在直路上行驶,快跑者将首先到达目的地。但是,如果它们在圆形跑道上跑步,那么快跑者如果继续跑步就会追上慢跑者。 这正是我们在链表中使用两个速度不同的指针时会遇到的情况:如果没有环,快指针将停在链表的末尾。如果有环,快指针最终将与慢指针相遇。 */ //算法实现: /** * 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 == NULL || head->next == NULL) return false; ListNode *fast = head, *slow = head; while (fast != NULL && fast->next != NULL) { fast = fast->next->next; //快指针,每次移动两步 slow = slow->next; //慢指针,每次移动一步 if (fast == slow) //快慢指针相遇,说明有环 return true; } return false; } };