数据结构与算法——找出单链表中的倒数第k个元素

2021/7/26 12:05:34

本文主要是介绍数据结构与算法——找出单链表中的倒数第k个元素,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

如何找出单链表中的倒数第k个元素

方法一:顺序遍历两遍

首先遍历一遍单链表,求出整个单链表的长度n,然后把求倒数第k个元素转换为求正数第n-k个元素,再去遍历一次就可以得到结果

方法二:快慢指针法

在查找过程中,设置两个指针,让其中一个指针比另一个指针先前移k步,然后两个指针同时往前移动。循环,直到先行的指针值为NULL时,另一个指针所指的位置就是所要找的位置

struct ListNode {
    int val;
    ListNode *next;
    ListNode() : val(0), next(nullptr) {}
    ListNode(int x) : val(x), next(nullptr) {}
    ListNode(int x, ListNode *next) : val(x), next(next) {}
};

ListNode* FindLastK(ListNode* head, int k)
{
    if (head == NULL || head->next == NULL)
    {
        return head;
    }

    ListNode* slow = head->next;
    ListNode* fast = head->next;
    for (int i = 0; i < k && fast; ++i)
    {
        fast = fast->next; //前移k步
    }
    //判断k是否已超出链表长度
    if (i < k)
    {
        return NULL;
    }
    
    while (fast != NULL)
    {
        slow = slow->next;
        fast = fast->next;
    }

    return slow;
}


这篇关于数据结构与算法——找出单链表中的倒数第k个元素的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程