📌  相关文章
📜  用于从链表末尾打印第 N 个节点的 Cpp14 程序(重复)(1)

📅  最后修改于: 2023-12-03 15:11:15.691000             🧑  作者: Mango

用于从链表末尾打印第 N 个节点的 Cpp14 程序(重复)

在处理链表问题时,经常需要从链表末尾开始遍历链表。本文介绍如何使用 C++14 来从链表末尾打印第 N 个节点。

思路

由于链表的特殊性质,我们无法像数组一样通过下标来访问链表中的元素。因此,我们需通过遍历链表来寻找目标节点。

当从链表末尾开始遍历链表时,我们可以使用递归的方式,先前序遍历链表,当遍历到链表的末尾时,再逆序返回打印第 N 个节点。在递归过程中,每次返回前,我们都使待打印的节点下标减一,直到下标为 0 时,打印该节点。

代码实现

以下是 C++14 的实现代码。为了方便描述,假设我们的链表存储整数类型节点。

#include <iostream>

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

void printNthFromEnd(ListNode* head, int& n) {
    if (head == nullptr) {
        return;
    }

    printNthFromEnd(head->next, n);

    if (n == 0) {
        std::cout << head->val << " ";
    }

    --n;
}

int main() {
    ListNode* head = new ListNode(1);
    head->next = new ListNode(2);
    head->next->next = new ListNode(3);
    head->next->next->next = new ListNode(4);
    head->next->next->next->next = new ListNode(5);

    int n = 2;
    printNthFromEnd(head, n);

    return 0;
}

在函数 printNthFromEnd 的实现中,我们使用了引用类型的 n 变量。这个变量被用来记录我们需要打印的节点的下标。

测试数据

测试数据是确定程序是否正确的重要手段。以下是一些常见的测试数据。

输入:

链表: 1->2->3->4->5,要打印倒数第二个节点

输出:

4

输入:

链表: 1->2->3->4->5,要打印倒数第五个节点

输出:

1
总结

由于链表的独特性质,从链表末尾开始遍历链表是常见且重要的操作。在本文中,我们介绍了如何使用 C++14 的递归方式来实现从链表末尾打印第 N 个节点。你可以使用本文提供的代码实现,也可以在自己的项目中根据需求做一些调整。