用c++写一个程序,给定一个链表,判断链表是否存在环型链表
时间: 2024-11-05 18:11:54 浏览: 5
算法:给定一个链表,判断链表中是否存在环
在C++中,你可以使用快慢指针的方法来判断一个链表是否包含环。这种方法也被称为“龟兔赛跑”算法,通过两个节点(快指针和慢指针)同时遍历链表。如果链表有环,那么快指针最终会追上慢指针;如果没有环,快指针会在链表结束时先到达终点。
以下是一个简单的C++代码示例:
```cpp
#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
// 检查是否有环
bool hasCycle(ListNode* head) {
if (head == nullptr || head->next == nullptr) {
return false; // 空链表或只有一个节点,无环
}
ListNode fast(head->next);
ListNode slow(head);
while (fast != nullptr && fast->next != nullptr) {
if (slow == fast) { // 如果慢指针追上了快指针,则存在环
return true;
}
slow = slow->next;
fast = fast->next->next; // 快指针每次移动两步
}
return false; // 没有环,快指针已到链尾
}
int main() {
// 创建一个带环的链表...
// ...
// 调用函数检查环
bool isCyclic = hasCycle(head);
if (isCyclic) {
cout << "链表包含环" << endl;
} else {
cout << "链表不含环" << endl;
}
return 0;
}
```
阅读全文