数据结构与算法面试题单向链表倒数第k个节点

Posted zhiyong_will

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构与算法面试题单向链表倒数第k个节点相关的知识,希望对你有一定的参考价值。

题目来源“数据结构与算法面试题80道”。

这里写图片描述

问题分析:遍历一遍链表的时间复杂度为O(n),但是链表节点的遍历只能按顺序遍历,问题中是需要取到倒数第k个,最直接的想法是遍历两遍链表,第1遍得到链表的长度,第2遍是取到倒数第k个;那么能否只遍历一遍就能取到倒数第k个节点,最关键的点是需要确定链表的长度,我们可以使用双指针的方法:第一个指针用于遍历整个链表,第二个链表用于遍历部分链表,第一个指针比第二个指针多走k步,当第一个指针遍历完链表,第二个指针所指的即为倒数第k个数,如下图所示:

这里写图片描述

方法:

ListNode* get_reverse_k(ListNode *head, int k){
    if (NULL == head) return NULL;

    ListNode *p = head;
    ListNode *q = head;
    int step = 0;
    while (NULL != p->m_pNext){
        if (step >= k){
            q = q->m_pNext;
        }
        p = p->m_pNext;
        step ++;
    }
    if (step < k) return NULL;
    else return q;
}

以上是关于数据结构与算法面试题单向链表倒数第k个节点的主要内容,如果未能解决你的问题,请参考以下文章

算法面试题 02.02. 返回倒数第 k 个节点

数据结构和算法之单向链表二:获取倒数第K个节点

剑指Offer-代码的鲁棒性面试题22:链表中倒数第k个节点

数据结构与算法面试之链表问题集锦(下)

《剑指offer》面试题10:链表中倒数第k个节点

力扣题解-面试题22. 链表中倒数第K个节点