求链表的倒数第k个结点
时间: 2024-11-30 19:21:59 浏览: 20
在C语言中,求链表的倒数第 k 个节点可以使用双指针或者递归的方法。这里提供一种常见的双指针解决方案:
1. 定义两个指针 `prev` 和 `curr`,初始时 `prev` 都指向 `NULL`,而 `curr` 指向链表头节点。
2. `prev` 指针先向前移动 k - 1 步(因为我们需要找到倒数第 k 个节点,所以需要跳过前面的 k - 1 个节点)。
3. 然后 `curr` 和 `prev` 同时开始遍历链表,每当 `curr` 移动一次,就更新 `prev` 为 `prev->next`。
4. 当 `curr` 走到链表尾部时,`prev` 指向的就是链表的倒数第 k 个节点。
```c
struct ListNode* findKthToTail(struct ListNode* head, int k) {
if (head == NULL || k <= 0) {
return NULL;
}
struct ListNode* prev = NULL;
struct ListNode* curr = head;
for (int i = 0; i < k - 1; i++) {
if (curr->next != NULL) {
curr = curr->next;
} else {
return NULL; // 如果链表长度小于 k,无法找到倒数第 k 个节点
}
}
while (curr->next != NULL) {
prev = curr;
curr = curr->next;
}
return prev; // 返回倒数第 k 个节点
}
```
阅读全文