求链表倒数第K个节点C++
时间: 2024-10-25 12:17:23 浏览: 13
在C++中,求链表倒数第K个节点通常采用双指针法,同时维护两个指针,一个快指针每次移动两步,另一个慢指针每次移动一步。当快指针到达链表尾部时,慢指针会恰好位于倒数第K个位置。
以下是简单的C++代码实现:
```cpp
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* findKthToTail(ListNode* head, int k) {
if (head == nullptr || k <= 0) return nullptr;
ListNode* slow = head;
ListNode* fast = head;
// 快慢指针相距k - 1个节点时
for (int i = 0; i < k - 1 && fast != nullptr; i++) {
fast = fast->next;
}
if (fast == nullptr) return nullptr; // 如果链表长度小于k,则返回nullptr
while (fast != nullptr) {
slow = slow->next;
fast = fast->next;
}
return slow; // 返回倒数第K个节点
}
```
在这个函数中,首先检查输入是否有效,然后初始化快慢指针,快指针先走k-1步,接着两者同时移动直到快指针到达链表尾部。此时,慢指针就指向了倒数第K个节点。
阅读全文