题目:实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。
快慢指针思想,画图更容易理解
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
int kthToLast(struct ListNode* head, int k) {
assert(head!=NULL);
if(head==NULL)
return -1;
struct ListNode*slow=head;
struct ListNode*fast=head;
//快指针先走k-1步
for(int i=0;i<k;i++)
{
fast=fast->next;
}
//快慢指针同时同频走
//两个指针间隔k-
while(fast!=NULL)
{
slow=slow->next;
fast=fast->next;
}
//fast走到链表末尾时slow走到倒数第k个
return slow->val;
}