题目: 141-环形链表
bool hasCycle(ListNode *head) {
if (head == nullptr || head->next == nullptr) {
return false;
}
// 快慢指针: 初始为相同节点
ListNode *slow = head;
ListNode *fast = head;
// 判断快指针是否为空即可
while (fast != nullptr && fast->next != nullptr) {
// 先移动快慢指针
slow = slow->next;
fast = fast->next->next;
// 再判断是否相等
if (slow == fast) {
return true;
}
}
return false;
}环形链表II
不仅要判断有无环,有环的情况下,还要返回环的入口节点
// 快慢指针是判断有无环,现在还需要返回入口节点
ListNode *detectCycle(ListNode *head) {
ListNode *slow = head;
ListNode *fast = head;
while (fast != nullptr && fast->next != nullptr) {
slow = slow->next;
fast = fast->next->next;
if (slow == fast) {// 碰到相同节点了,说明有环。
fast = head;
while (fast != slow) {
fast = fast->next;
slow = slow->next;
}
return fast;
}
}
return nullptr;
}





Loading Comments...