题目描述
输入一个链表,输出该链表中倒数第k个结点。
思路
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
用两个指针指向链表头部,第一个指针先走k-1步,到第k步,第二个指针从头和第一个指针同时走,第一个指针走到链表尾部时,第二个指针就是倒数第k个节点
*/
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
if(pListHead==NULL || k==0) //链表为空或k=0 返回空
return NULL;
ListNode *pAhead=pListHead;//第一个指针
ListNode *pBehind=NULL;//第二个指针
for( int i=0;i<k-1;i++)
{
if(pAhead->next!=NULL)
pAhead=pAhead->next;
else
return NULL;
}
pBehind=pListHead;
while(pAhead->next!=NULL)
{
pAhead=pAhead->next;
pBehind=pBehind->next;
}
return pBehind;
}
};