⭐️ 往期相关文章
💫链接1:leetcode 876.链表的中间结点(快慢指针问题)
💫链接2:leetcode 206.反转链表
💫链接3:leetcode 203.移除链表元素
💫链接4:数据结构-手撕单链表+代码详解
⭐️ 题目描述
🌟 牛客链接:链表中倒数第k个结点
1️⃣ 代码:
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
*
* @param pListHead ListNode类
* @param k int整型
* @return ListNode类
*/
/*
思路:快慢指针问题,先让快指针走k步,再让慢指针和快指针同时走。快指针到终点时,
慢指针就到 倒数第k个结点位置上。
*/
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {
if (pListHead == NULL) {
return NULL;
}
struct ListNode* slow = pListHead;
struct ListNode* fast = pListHead;
// 让快指针走k步
while (k && fast != NULL) {
fast = fast->next;
k--;
}
// 快慢指针同时走
while (fast != NULL) {
slow = slow->next;
fast = fast->next;
}
if (k) {
return NULL;
}
return slow;
}