1,实现思路
查找倒数第K个节点
第一种思路: 倒数第K个节点也就是正数第N-K+1个节点,我们可以将链表遍历一遍求出链表的长度N,然后在遍历到第N-K+1个节点,就实现了查找倒数第K个节点。
但是这种思路需要将链表遍历两遍,那么有没有遍历一遍的方法呢?
第二章思路:可以定义两个指针,首先第一个指针指向头节点,并且向后遍历k-1步,第二个指针指向头结点保持不动,此时两个指针的距离保持k-1,然后两个指针同时向后遍历,当第一个指针指向NULL的时候,第二个指针刚好指向倒数第K个节点。
2,代码实现
LNode *FindKNode(LNode *phead,unsigned int k)
{
if(phead == NULL || k == 0)
return NULL;
LNode *pFirsthead = phead;
LNode *pSecondhead = phead;
for(unsigned i = 0; i < k - 1; ++i)
{
if(pFirsthead->next != NULL)
{
pFirsthead = pFirsthead->next;
}
else
{
return NULL;
}
}
while(pFirsthead != NULL)
{
pFirsthead = pFirsthead->next;
pSecondhead = pSecondhead->next;
}
return pSecondhead;
}