剑指offer——链表中倒数第k个结点
题目描述 :
输入一个链表,输出该链表中倒数第k个结点。
题目分析:
做一个长度为k的滑动窗口,当访问链表结束时,输出窗口第一个;
用队列做这个窗口。
AC代码:
/*
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||k==0)
return NULL;
queue <ListNode*> A;
while (pListHead != NULL)//窗口滑动到结束为止
{
A.push(pListHead);
if (A.size()>k)//长度保持k
A.pop();
pListHead = pListHead->next;
}
if(A.size()<k)//长度不足k返回空
return NULL;
return A.front();//返回队首
}
};