来自牛客的一道oj题:链表中倒数第k个结点_牛客题霸_牛客网 (nowcoder.com)
问题描述:
输入一个链表,输出该链表中倒数第k个结点。
示例一:
输入: 1,{1,2,3,4,5}
返回值: {5}
示例二:
输入: 5,{1,2,3,4,5}
返回值: {1}
问题分析:
要求链表中倒数第K个节点,可以用双指针的办法:
定义两个指针:fast,slow
先让fast走K步,之后让slow和fast同时走,直到fast为空后,slow指向的就是倒数第K个节点
如图所示。
代码实现:
1.先让fast走K步
while(k--)
{
if(fast==NULL)
{
return NULL;
}
fast = fast->next;
}
2.之后让slow和fast同时走,直到fast为空后
while(fast)
{
slow = slow->next;
fast = fast->next;
}
3.返回slow
整体代码:
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k )
{
if(pListHead==NULL)
{
return NULL;
}
struct ListNode* slow =pListHead;
struct ListNode* fast =pListHead;
while(k--)
{
if(fast==NULL)
{
return NULL;
}
fast = fast->next;
}
while(fast)
{
slow = slow->next;
fast = fast->next;
}
return slow;
}