c++ listnode的循环检测方法

avatar
作者
筋斗云
阅读量:0

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

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

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

#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函数来检测链表中是否存在循环。如果存在循环,则输出"链表中存在循环";如果不存在循环,则输出"链表中不存在循环"。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!