用C言语实现 输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针
时间: 2023-08-31 11:12:30 浏览: 82
C语言实现输出链表中倒数第k个节点
5星 · 资源好评率100%
假设链表节点的结构体为:
```c
struct ListNode {
int val;
struct ListNode *next;
};
```
可以使用快慢指针的方法来实现,先让快指针走k步,然后慢指针和快指针一起走,当快指针到达链表尾部时,慢指针就指向了倒数第k个节点。具体实现代码如下:
```c
struct ListNode* findKthToTail(struct ListNode* head, int k) {
if (head == NULL || k <= 0) {
return NULL;
}
struct ListNode *fast = head;
struct ListNode *slow = head;
// 让快指针先走k步
for (int i = 0; i < k; i++) {
if (fast == NULL) {
return NULL; // 链表长度不足k
}
fast = fast->next;
}
// 快慢指针一起走
while (fast != NULL) {
fast = fast->next;
slow = slow->next;
}
return slow;
}
```
其中,做了一些异常处理,如果链表为空或k小于等于0,则返回NULL。如果链表长度不足k,则也返回NULL。
阅读全文