题目描述
输入一个链表,输出该链表中倒数第k个结点
两个游标,先让游标pre和游标rear都指向第一个结点,然后让游标rear先移动(向链表尾方向移
动),当游标rear移动了k步后,到达第(k+1)个结点。接下来,两个游标就同时移动。当游标rear到达链
表尾的时候(不是到达链表的最后一个结点,而是到达最后一个结点的next,即rear == null时),游标
pre所在位置就是链表的倒数第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||k==0)
return NULL;
ListNode*pTail=pListHead,*pHead=pListHead;
for(int i=1;i<k;++i)
{
if(pHead->next!=NULL)
pHead=pHead->next;
else
return NULL;
}
while(pHead->next!=NULL)
{
pHead=pHead->next;
pTail=pTail->next;
}
return pTail;
}
};