c语言输入一个单向链表,输出该链表中倒数第k个结点,链表的最后一个结点是倒数第1个节点。 【输入形式】 输入第一位为K值,其后接一串以空格分隔的整型值。 【输出形式】 输出为倒数第K个结点的值,若无,则输出Not Found
时间: 2024-09-21 11:13:40 浏览: 45
C语言实现输出链表中倒数第k个节点
5星 · 资源好评率100%
在 C 语言中,要实现这个功能,你需要遍历链表并使用两个指针。第一个指针 fast 每次移动 k 步,第二个指针 slow 每次只移动一步。当 fast 到达链表尾部时,slow 就位于倒数第 k 个节点的位置。以下是基本的步骤:
1. 定义结构体表示链表节点,包含一个整数值和指向下一个节点的指针。
2. 创建一个函数接收链表头节点的地址、k 值作为参数。
3. 初始化 fast 和 slow 指针,并将 fast 指针移到链表尾部。
4. 当 fast 不再有后续节点时(即为空),说明 slow 就是在倒数第 k 个节点上,返回 slow 的值。
5. 如果找不到倒数第 k 个节点,返回 "Not Found"。
下面是伪代码示例:
```c
// 链表节点定义
typedef struct Node {
int data;
struct Node* next;
} ListNode;
// 函数:获取倒数第 k 个节点
int find_kth_to_last(ListNode* head, int k) {
if (head == NULL || k <= 0) return -1; // 若链表为空或 k < 1,返回 Not Found
ListNode* fast = head;
ListNode* slow = head;
// 移动 fast 和 slow 指针
for (int i = 0; i < k - 1 && fast != NULL; ++i) {
fast = fast->next;
}
while (fast != NULL) {
fast = fast->next;
slow = slow->next;
}
// 返回 slow 的数据,如果 slow 已经到达 NULL,表示不存在倒数第 k 个节点
return slow ? slow->data : "Not Found";
}
```
阅读全文