📅  最后修改于: 2023-12-03 15:11:15.691000             🧑  作者: Mango
在处理链表问题时,经常需要从链表末尾开始遍历链表。本文介绍如何使用 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 个节点。你可以使用本文提供的代码实现,也可以在自己的项目中根据需求做一些调整。