c++编程求循环单链表长度
时间: 2024-09-24 21:17:40 浏览: 49
数据结构C++ 单链表的实现 .cpp和.h文件
在 C++ 中,计算循环单链表的长度通常涉及到遍历整个链表并计数节点。由于链表是循环的,所以在遍历的过程中需要设置一个标志来检查是否已经访问过列表的某个节点,防止陷入无限循环。下面是一个简单的示例:
```cpp
class ListNode {
public:
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
int getCycleLength(ListNode* head) {
if (head == nullptr || head->next == nullptr) {
return 0; // 非循环链表,长度为0
}
ListNode *slow = head;
ListNode *fast = head->next;
while (slow != fast) { // 当两个指针相遇时,找到了循环
if (fast == nullptr || fast->next == nullptr) {
return 0; // 如果fast指针到达了末尾,说明不是循环链表
}
slow = slow->next;
fast = fast->next->next;
}
// 初始化长度计数器
int length = 1;
slow = head;
while (slow != fast) {
slow = slow->next;
fast = fast->next;
length++;
}
return length;
}
```
在这个函数中,`slow` 指针每次移动一步,而 `fast` 指针每次移动两步。当它们相遇时,说明找到了循环开始的位置。然后从头开始再次遍历,直到它们再次相遇,此时的遍历次数就是循环链表的长度。
阅读全文