题目描述:输入一个链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点,从头结点开始它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个结点是值为4的结点。
完整代码:
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
//检查输入的头节点指针和k值是否合法
if(pListHead == nullptr || k == 0)
return nullptr;
/*******创建两个指针********/
//创建前指针
ListNode* P1 = pListHead;
//创建后指针
ListNode* P2 = nullptr;
//先让P1先走k-1步
for(unsigned int i = 0; i<k-1; i++)
{
//判断P1下一步是否为空
if(P1->next != nullptr)
{
P1 = P1->next;
}
else
return nullptr; //说明链表的长度小于k
}
//将后指针指向头节点
P2 = pListHead;
//P1遍历到链表的结尾
while(P1->next != nullptr)
{
//P1和P2同步往前走,当P1走到结尾,则P2指向倒数第k的节点
P1 = P1->next;
P2 = P2->next;
}
//返回倒数的k的节点
return P2;
}
};