#include<iostream>
using namespace std;
struct ListNode
{
int m_nValue;
ListNode* m_pNext;
};
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k)
{
if (pListHead == nullptr || k == 0)
return nullptr;
ListNode* pAhead = pListHead;
ListNode* pBehind = nullptr;
for (unsigned int i = 0; i < k - 1; ++i)
{
if (pAhead->m_pNext != nullptr)
pAhead = pAhead->m_pNext;
else
{
return nullptr;
}
}
pBehind = pListHead;
while (pAhead->m_pNext != nullptr)
{
pAhead = pAhead->m_pNext;
pBehind = pBehind->m_pNext;
}
return pBehind;
}
int main()
{
ListNode* head = new ListNode();
head->m_nValue = 1;
head->m_pNext = nullptr;
ListNode* a = new ListNode();
a->m_nValue = 2;
a->m_pNext = nullptr;
head->m_pNext = a;
ListNode* b = new ListNode();
b->m_nValue = 3;
b->m_pNext = nullptr;
a->m_pNext = b;
ListNode* c = new ListNode();
c->m_nValue = 4;
c->m_pNext = nullptr;
b->m_pNext = c;
ListNode* d = new ListNode();
d->m_nValue = 5;
d->m_pNext = nullptr;
c->m_pNext = d;
ListNode* e = new ListNode();
e->m_nValue = 6;
e->m_pNext = nullptr;
d->m_pNext = e;
ListNode* find = new ListNode();
find = FindKthToTail(head, 3);
cout << find->m_nValue << endl;
cin.get();
return 0;
}