//假如单链表有n个节点,倒数第k个节点,即为n-k+1;
//利用双指针进行判断,前指针走到k-1的位置,即开头的k-1位置,然后让后指针跟前指针一起走
//当前指针到达尾部的时候,后指针刚好到达倒数第K个节点
#include<iostream>
struct listNode
{
int m_nValue;
listNode* m_Next;
};
//假如单链表有n个节点,倒数第k个节点,即为n-k+1;
//利用双指针进行判断,前指针走到k-1的位置,即开头的k-1位置,然后让后指针跟前指针一起走
//当前指针到达尾部的时候,后指针刚好到达倒数第K个节点
listNode* FindKthToTail(listNode* pHead, int k)
{
if (pHead == nullptr || k == 0)return nullptr;
listNode* pAhead = pHead;
listNode* pBehind = nullptr;
for (int i = 0;i < k - 1;++i)
{
if (pAhead->m_Next)//倒数第K个节点是否超出了节点范围
pAhead = pAhead->m_Next;
else
return nullptr;
}
pBehind = pAhead;
while (pAhead->m_Next)
{
pAhead = pAhead->m_Next;
pBehind = pBehind->m_Next;
}
return pBehind;
}