题目描述
输入一个链表,输出该链表中倒数第k个结点。
解题思路
利用前后指针的方法,第一个指针first先往前推移k步,第二个指针second放在开头,两者之间相差k步,然后同时向前推移,当first指针到达末尾的时候,可以根据second找到倒数第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)
{
auto test = pListHead;
int len = 0;
while (test)
{
len++;
test = test->next;
}
if (len < k) return nullptr;
auto first = pListHead;
auto second = pListHead;
for (int i = 0; i < k; i++)
{
first = first->next;
}
while (first != NULL)
{
first = first->next;
second = second->next;
}
return second;
}
};