链表结点定义如下:
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;
}
本文介绍了一种链表中查找倒数第K个节点的算法实现。通过两次遍历链表的方式,首先统计链表长度,然后根据长度确定从头结点开始再次遍历到目标节点的位置。
3089

被折叠的 条评论
为什么被折叠?



