用c 语言输入一个单向链表,输出该链表中倒数第k个结点,链表的最后一个结点是倒数第1个节点。
时间: 2023-05-18 09:06:45 浏览: 284
C语言实现输出链表中倒数第k个节点
5星 · 资源好评率100%
以下是用 C 语言实现的代码,可以输入一个单向链表,输出该链表中倒数第 k 个结点:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表结构体
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
// 创建链表
ListNode* createList(int n) {
ListNode *head = NULL, *tail = NULL;
for (int i = 0; i < n; i++) {
int val;
scanf("%d", &val);
ListNode *node = (ListNode*)malloc(sizeof(ListNode));
node->val = val;
node->next = NULL;
if (head == NULL) {
head = node;
tail = node;
} else {
tail->next = node;
tail = node;
}
}
return head;
}
// 输出链表
void printList(ListNode *head) {
while (head != NULL) {
printf("%d ", head->val);
head = head->next;
}
printf("\n");
}
// 获取链表中倒数第 k 个结点
ListNode* getKthFromEnd(ListNode* head, int k) {
ListNode *fast = head, *slow = head;
for (int i = 0; i < k; i++) {
fast = fast->next;
}
while (fast != NULL) {
fast = fast->next;
slow = slow->next;
}
return slow;
}
int main() {
int n, k;
scanf("%d %d", &n, &k);
ListNode *head = createList(n);
ListNode *kth = getKthFromEnd(head, k);
printf("%d\n", kth->val);
return 0;
}
```
注意:这段代码只是一个示例,实际应用中需要考虑更多的边界情况和错误处理。
阅读全文