1、题目描述
输入一个链表,输出该链表中倒数第k个结点。
2、解题思路
使用两个指针,该两个指针间距k个节点,当后面的指针到达链表尾部时,另一个指针则指向倒数第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 == nullptr || k == 0)
return nullptr;
ListNode* pHead = pListHead, * pTail = pListHead;
//如果链表长度大于k,pTail指针向后移动k个节点,使pHead和pTail之间相隔k个节点
for (int i = 0 ; i < k; ++i)
{
if(pTail == nullptr)
{
return nullptr;
}
pTail = pTail->next;
}
//当pTail为空指针时,pHead指向倒数第k个节点
while (pTail != nullptr)
{
pTail = pTail->next;
pHead = pHead->next;
}
return pHead;
}
};