请在c++环境中写出能够测定给定链表的环长度的函数。函数声明为int LinkedListCircleLengthNODE head
以下是一种可能的实现:
struct NODE {
int data;
NODE* next;
};
int LinkedListCircleLength(NODE* head) {
if (head == nullptr || head->next == nullptr) {
return 0; // 空链表或只有一个节点,无环
}
NODE* slow = head->next;
NODE* fast = head->next->next;
while (fast != nullptr && fast->next != nullptr) {
if (slow == fast) { // 快慢指针相遇,说明有环
int length = 1;
NODE* p = slow->next;
while (p != slow) { // 统计环的长度
length++;
p = p->next;
}
return length;
}
slow = slow->next;
fast = fast->next->next;
}
return 0; // 快指针到达链表尾部,无环
}
该函数采用快慢指针的方法,先让快指针走两步,慢指针走一步,如果快指针追上慢指针,说明有环;否则,快指针到达链表尾部,说明无环。如果有环,则从相遇点开始,再次遍历整个环,统计环的长度即可。该函数的时间复杂度为O(n),空间复杂度为O(1)。
原文地址: https://www.cveoy.top/t/topic/WxE 著作权归作者所有。请勿转载和采集!