c++ listnode的循环检测方法

   2024-10-05 7570
核心提示:在C++中,可以使用快慢指针的方法来检测链表中是否存在循环。具体步骤如下:定义两个指针,一个快指针和一个慢指针,初始时都指

在C++中,可以使用快慢指针的方法来检测链表中是否存在循环。具体步骤如下:

定义两个指针,一个快指针和一个慢指针,初始时都指向链表的头节点。慢指针每次移动一步,快指针每次移动两步。如果链表中存在循环,则快指针会追上慢指针,即它们会相遇。如果链表中不存在循环,则快指针会先到达链表尾部,此时可以结束循环检测。

下面是一个示例代码,用于检测链表中是否存在循环:

#include <iostream>struct ListNode {    int val;    ListNode* next;    ListNode(int x) : val(x), next(nullptr) {}};bool hasCycle(ListNode* head) {    if (head == nullptr || head->next == nullptr) {        return false;    }    ListNode* slow = head;    ListNode* fast = head->next;    while (fast != nullptr && fast->next != nullptr) {        if (slow == fast) {            return true;        }        slow = slow->next;        fast = fast->next->next;    }    return false;}int main() {    ListNode* head = new ListNode(1);    head->next = new ListNode(2);    head->next->next = new ListNode(3);    head->next->next->next = new ListNode(4);    head->next->next->next->next = head;  // 创建一个循环    if (hasCycle(head)) {        std::cout << "链表中存在循环" << std::endl;    } else {        std::cout << "链表中不存在循环" << std::endl;    }    return 0;}

在上面的示例代码中,我们创建了一个带有循环的链表,并使用hasCycle函数来检测链表中是否存在循环。如果存在循环,则输出"链表中存在循环";如果不存在循环,则输出"链表中不存在循环"。

 
举报打赏
 
更多>同类物流大全
推荐图文
推荐物流大全
点击排行

网站首页  |  关于我们  |  联系方式 | 网站留言    |  赣ICP备2021007278号