题目描述
输入一个链表,输出该链表中倒数第k个结点。
方法一:空间换时间,注意k为无符号整数,k-1得到的将不是-1,而是4292967295(无符号的0xFFFFFFFF)。
/*
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 nullptr;
vector<ListNode*> vec;
ListNode* p = pListHead;
while(p != nullptr)
{
vec.push_back(p);
p=p->next;
}
if(vec.size()<k)
return nullptr;
return vec[vec.size()-k];
}
};
方法二:一次遍历完成,注意输入检查。
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
if(!pListHead || k == 0)
return nullptr;
ListNode* ahead = pListHead;
ListNode* behind = nullptr;
for(unsigned int i = 0; i < k - 1; ++ i)
{
if(ahead->next != nullptr)
ahead = ahead->next;
else
return nullptr;
}
behind = pListHead;
while(ahead->next != nullptr)
{
ahead = ahead->next;
behind = behind->next;
}
return behind;
}
};