题目链接:
剑指 Offer 22. 链表中倒数第k个节点 - 力扣(LeetCode)
题目描述:
解题思路:快指针先走k步,快慢指针同时走
具体过程:开始快慢指针都指向头结点,先让快指针走k步,然后快慢指针同时走,当快指针走到空的时候,慢指针的位置即为链表倒数第k个结点的位置。
要注意的是,k的长度可能大于链表结点的长度,fast先走k步会走到空,因此还要要判断fast是否走到空,如果走到空,则返回空。
代码实现:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* getKthFromEnd(struct ListNode* head, int k){
struct ListNode* slow,*fast;
slow=fast=head;
while(k)
{
if(fast==NULL)//判断k是否大于链表长度
return NULL;
fast=fast->next;
k--;
}
while(fast)
{
slow=slow->next;
fast=fast->next;
}
return slow;
}