题目描述
输入一个链表,输出该链表中倒数第k个结点。
思路:
快慢双指针,初始距离相差K,同时走,直到快指针为空,慢指针为所求结点
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k)
{
if(pListHead == NULL) return NULL;
ListNode *low = pListHead;
ListNode *high = pListHead;
for(int i = 1;i<=k;i++)//先走K步
{
if(high == NULL) return NULL;//如果快指针提前走向空则链表长度小于K,不可能有倒数第K个结点
high = high->next;
}
while(high!=NULL)//同时走
{
low = low->next;
high = high->next;
}
return low;
}
};