题目描述
输入一个链表,输出该链表中倒数第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 ||k<=0 ) return NULL; //k<= 返回NULL,这道题有点默认从1开始计数.
unsigned int right=1;
ListNode *pNode = pListHead;
ListNode *kNode = pListHead;
while(right<k){ //使用双指针,并使两个指针保持k-1距离
if(pNode->next==NULL) //链表长度小于k时
return NULL;
else
pNode = pNode->next; //若链表长度大于k,将pNode先指向从链表头开始第k个,使与kNode相差k-1
right++;
}
while(pNode->next){
pNode=pNode->next;
kNode = kNode->next; //pNode和KNode都加1,始终保持k+1长度,直到pNode到链表尾部
}
return kNode;
}
};