美文网首页经典面试题笔试&&面试经验IT面试
经典面试题19 - 求链表倒数第k个节点

经典面试题19 - 求链表倒数第k个节点

作者: 豆志昂扬 | 来源:发表于2017-04-09 18:15 被阅读97次

    问题
    输入一个单向链表,输出该链表中倒数第k个节点,链表的倒数第0个节点为链表的尾指针。

    解答
    设置两个指针 fast、slow,首先 fast 和 slow 都指向 head,然后 fast 向前走 k 步,这样 fast 和 slow 之间就间隔 k 个节点,最后 fast 和 slow 同时向前移动,直至 fast 走到链表末尾, 这是slow指向的就是第k个节点。

    代码如下:

    Node* theKthNode(Node *head,int k)
    {
        if(k < 0) return NULL;    //异常判断
        Node *slow,*fast;
        slow = fast = head;
        int i = k;
        for(;i>0 && fast!=NULL;i--)
        {
            fast = fast->next;
        }
        if(i > 0)    return NULL;    //考虑k大于链表长度的case
        while(fast != NULL)
        {
            slow = slow->next;
            fast = fast->next;
        }
        return slow;
    }
    

    注意该题中使用了双指针来遍历链表,双指针策略可以解决很多经典的关于链表的问题,如链表是否有环。

    经典面试100题 - 持续更新中

    相关文章

      网友评论

        本文标题:经典面试题19 - 求链表倒数第k个节点

        本文链接:https://www.haomeiwen.com/subject/oxadattx.html