22日作业
include <stdio.h>
include <stdlib.h>
// 定义链表节点结构体
typedefstruct ListNode
{
int data;
struct ListNode* next;
};
// 查找倒数第k个节点的函数
int findKthFromEnd(struct ListNode* head, int k)
{
if (head == NULL || k <= 0)
{
return 0; // 输入不合法,返回0
}
struct ListNode* fast = head;
struct ListNode* slow = head;
// 让fast指针先走k步
for (int i = 0; i < k; ++i)
{
if (fast == NULL) {
return 0; // 链表长度小于k,返回0
}
fast = fast->next;
}
// fast和slow一起移动,直到fast到达链表末尾
while (fast != NULL)
{
fast = fast->next;
slow = slow->next;
}
// slow现在指向的就是倒数第k个节点
printf("倒数第%d个节点的值为:%d\n", k, slow->data);
return 1; // 查找成功,返回1
}
// 测试函数
int main()
{
// 创建链表:1 -> 2 -> 3 -> 4 -> 5
struct ListNode* head = (struct ListNode)malloc(sizeof(struct ListNode));
head->data = 1;
head->next = NULL;
struct ListNode current = head;
for (int i = 2; i <= 5; ++i)
{
struct ListNode* newNode = (struct ListNode)malloc(sizeof(struct ListNode));
newNode->data = i;
newNode->next = NULL;
current->next = newNode;
current = newNode;
}
// 测试查找倒数第3个节点
int k = 3;
int result = findKthFromEnd(head, k);
if (result == 0)
{
printf("链表长度小于%d\n", k);
}
// 释放链表内存
struct ListNode temp;
while (head != NULL)
{
temp = head;
head = head->next;
free(temp);
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· Apache Tomcat RCE漏洞复现(CVE-2025-24813)