题目描述
输入一个链表,输出该链表中倒数第k个结点。
想法1;
第一步: 我们应该先创建两个 指针,一个指针快,一个指针慢,
第二步: 我们先让快指针走 k-1 步,然后让快指针和慢指针同时走,当快指针走到next->NULL时,那么慢指针刚好走到倒数第k个节点。
同学可以试一试,在纸上面画一画。就可以很快思考出来了。
想法2:
第一步:我们可以先用一个计数《count》,把链表先遍历一遍;
第二步:让count -= k, 把count重新算出来就可以了,这样的做法就是把倒数第k的节点数算出来;
第三步:用一个while循环,让count>=0,然后让count–,把下一个节点的值给前一个,这样当count=0时,就出来时。
现在我们就用第二种的思想,来实现一下代码:
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
int count = 0;
ListNode* dpf = pListHead; //在这里不知道为什么不能使用temp,难道是因为库里面的吗?
while(dpf != NULL)
{
count++;
dpf = dpf->next;
}
count -= k;
dpf = pListHead;
if(count >= 0)
{
while(count--)
{
dpf = dpf->next;
}
return dpf;
}
else
return NULL;
}
};
我相信,当你看了上面的思想之后,再看下面的代码,这样就很快可以明白了,嘿嘿,如果你明白了一点,希望你可以关注一下。