
🌈这里是say-fall分享,感兴趣欢迎三连与评论区留言 🔥专栏: 《C语言从零开始到精通》 《C语言编程实战》 《数据结构与算法》 《小游戏与项目》 💪格言:做好你自己,你才能吸引更多人,并与他们共赢,这才是你最好的成长方式。

我们之前在处理中间节点的时候,学过一个方法叫快慢指针,这个题目的笨办法就是先来遍历一遍,得到总数目然后再遍历一遍总数目的倒数第k个
但是我们如果用快慢指针的话就能很方便的处理遍历多次的问题:我们只要一开始让满指针在head的位置不动,而快指针向前走k个,然后不断同步向前,最后快指针变为空,慢指针的位置就是要求的节点,返回值val即可
struct ListNode
{
struct ListNode* next;
int val;
};
//返回链表倒数第k个元素
typedef struct ListNode ListNode;
int kthToLast(struct ListNode* head, int k)
{
ListNode* slow = head;
ListNode* fast = head;
for (int i = 0;i < k;i++)
{
fast = fast->next;
}
while (fast)
{
fast = fast->next;
slow = slow->next;
}
return slow->val;
}