题目描述
输入一个链表,输出该链表中倒数第k个结点。
分析:
用快慢指针的思想,两个指针一开始都指向头结点,快指针先走k 步,指向第k+1个节点,然后慢指针开始走,直到快指针指向空节点,慢指针指向倒数第k个节点,也就是第N-k+1个节点。当然,要注意判断一些风险情况,链表为空,k==0,k>N
代码:
/*
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* fast=pListHead;
ListNode* slow=pListHead;
while(k--){
//如果k>链表的长度
if(fast==NULL)
return NULL;
fast=fast->next;
}
while(fast!=NULL){
fast=fast->next;
slow=slow->next;
}
return slow;
}
};