LeetCode 面试题 02.02. 返回倒数第 k 个节点
面试题 02.02. 返回倒数第 k 个节点
题目链接:面试题 02.02. 返回倒数第 k 个节点
题目描述:实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。
/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/typedef struct ListNode ListNode;
int kthToLast(struct ListNode* head, int k)
{//创建快慢指针ListNode* slow = head;ListNode* fast = head;//快指针先走k个结点while(k--){fast = fast->next;}while(fast){slow = slow->next;fast = fast->next;}return slow->val;
}
解题思路:
解决这个问题的核心思想是:通过在两个指针之间制造并保持一个固定的距离差,当一个指针到达终点时,另一个指针就正好在我们想要的位置上。
想象一下两个指针在一个链表上移动:
- 我们想找到距离终点
k
的位置。 - 我们先让指针 A(我们称之为
fast
指针)从起点出发,先走k
步。 - 然后,让指针 B(我们称之为
slow
指针)也从起点出发。 - 现在,A 和 B 同时以相同的速度(每次一步)向前走。
- 因为 A 和 B 之间始终保持着
k
步的距离差,所以当 A 到达终点时,B 所在的位置,正好就是距离终点k
步的地方。