C语言输入一个链表,输出这个链表的倒数第K个节点
时间: 2024-06-17 22:01:08 浏览: 195
C语言实现输出链表中倒数第k个节点
5星 · 资源好评率100%
在C语言中,要输入一个链表并输出其倒数第K个节点,首先你需要创建一个链表结构,然后实现一个方法来遍历链表,找到倒数第K个节点。这里是一个简单的步骤说明:
1. **定义链表结构**:
假设链表节点定义如下:
```c
typedef struct Node {
int data;
struct Node* next;
} Node;
```
2. **输入链表**:
创建一个函数来接收用户输入或已存在的链表节点,并构建链表:
```c
void inputList(Node** head, int K) {
Node* current = *head;
int k = 0;
// 输入节点数据和添加到链表
while (current != NULL) {
// 用户输入或从已有的链表获取数据
// ...
current = current->next;
k++;
}
// 链表长度至少是K+1(因为从头开始计数)
if (k < K) {
printf("链表太短,无法找到倒数第K个节点");
return;
}
}
```
3. **遍历链表找到倒数第K个节点**:
使用两个指针,快慢指针,快指针每次前进两步,慢指针每次前进一步。当快指针到达链表尾部时,慢指针指向的就是倒数第K个节点:
```c
Node* findKthFromEnd(Node* head, int K) {
if (head == NULL) return NULL;
Node* slow = head;
Node* fast = head;
for (int i = 0; i < K; i++) {
fast = fast->next;
}
while (fast != NULL) {
fast = fast->next;
slow = slow->next;
}
return slow;
}
```
4. **输出倒数第K个节点**:
在`findKthFromEnd`函数返回后,打印出节点数据:
```c
void printNode(Node* node) {
printf("倒数第 %d 个节点的数据: %d\n", K, node->data);
}
int main() {
Node* head = NULL; // 初始化链表头部
inputList(&head, K); // 输入链表
Node* kthNode = findKthFromEnd(head, K);
if (kthNode != NULL) {
printNode(kthNode);
}
return 0;
}
```
阅读全文