题解 | #牛牛队列成环#
牛牛队列成环
https://www.nowcoder.com/practice/38467f349b3a4db595f58d43fe64fcc7
考察的知识点:遍历链表、修改节点的指针指向;
解答方法分析:
- 首先,判断链表是否为空或者只有一个节点,如果是,则直接返回 false,表示不存在环。
- 初始化两个指针
slow和fast,初始时都指向链表的头节点。 - 使用一个 while 循环,判断条件为
fast != nullptr和fast->next nullptr,即快指针fast还能往前移动两个节点。循环的目的是找到链表中的环或到达链表的末尾。 - 在循环中,每次将
slow指针向前移动一个节点,将fast` 指针向前移动两个节点。这样,快指针的速度是慢指针的两倍。 - 在每次移动后,检
slow和fast指向同一个节点,即slow == fast`。如果是,表示存在环,返回 true。 - 如果循环结束后,快指针
fast到达链表的末尾,即fast == nullptr或者fast->next == nullptr,表示链表无,返回 false。
所用编程语言:C++;
完整编程代码:↓
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) : val(x), next(nullptr) {}
* };
*/
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @return bool布尔型
*/
bool hasCycle(ListNode* head) {
if (head == nullptr || head->next == nullptr)
return false;
ListNode* slow = head;
ListNode* fast = head;
while (fast != nullptr && fast->next->next != nullptr) {
slow = slow->next;
fast = fast->next->next;
if (slow->val == fast->val) {
return true;
}
}
return false;
}
};

海康威视公司福利 1407人发布
