链表结点定义如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
算法实现
ListNode* FindLastK(ListNode* head, int k){
ListNode* p1=head, *p2=head;
int nNode=0;
while(p1->m_pNext != NULL)
{
nNode++;
p1=p1->m_pNext;
}
if(k>nNode)
return NULL;
int i=0;
while(i <= nNode-k)
{
p2=p2->m_pNext;
i++;
}
return p2;
}
int main()
{
ListNode* pHeader = NULL;
ListNode head;
pHeader = &head;
pHeader->m_pNext = NULL;
for(int i=1; i <=5; i++)
{
ListNode* node = new ListNode();
node->m_nKey = i;
node->m_pNext = pHeader->m_pNext;
pHeader->m_pNext = node;
}
ListNode* ret = FindLastK(pHeader,1);
if(ret != NULL)
{
cout << "Value is " << ret->m_nKey << endl;
}
return 0;
}