牛客网 链表中倒数第k个结点 《 两种想法加代码 》

题目描述
输入一个链表,输出该链表中倒数第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;
       
    }
};

我相信,当你看了上面的思想之后,再看下面的代码,这样就很快可以明白了,嘿嘿,如果你明白了一点,希望你可以关注一下。

猜你喜欢

转载自blog.csdn.net/dpfxaca6/article/details/88702783
今日推荐