C++程序 打印链表倒数第N个节点
介绍
链表是一种非常常见的数据结构。在链表中,每个节点包含了数据和一个指向下一个节点的指针。链表有很多种操作,其中一个非常重要的操作就是查找倒数第N个节点。在本篇文章中,我们将介绍如何使用C++编写程序,实现打印链表中倒数第N个节点的功能。
程序实现
我们首先定义一个链表节点类Node,用来表示链表中的每个节点。该类包含两个变量:数据data和指向下一个节点的指针next。
class Node {
public:
int data;
Node *next;
Node(int d) {
data = d;
next = NULL;
}
};
接下来我们实现一个函数printNthFromLast()
,它将接受一个参数“n”,表示要打印倒数第N个节点。我们将实现双指针算法,其中第一个指针先移动N步,然后第二个指针开始移动。当第一个指针到达链表的末端时,第二个指针正好指向倒数第N个节点。
void printNthFromLast(Node *head, int n) {
Node *first = head;
Node *second = head;
for(int i=0; i < n; i++){
if(first == NULL){
return;
}
first = first->next;
}
while(first != NULL){
first = first->next;
second = second->next;
}
cout << "倒数第" << n << "个节点的值是: " << second->data;
}
最后我们编写主函数,用来创建链表并调用函数printNthFromLast()
。
int main() {
Node *head = new Node(1);
head->next = new Node(2);
head->next->next = new Node(3);
head->next->next->next = new Node(4);
head->next->next->next->next = new Node(5);
int n = 2;
printNthFromLast(head, n);
return 0;
}
程序输出:
倒数第2个节点的值是: 4
代码说明
本程序中,我们定义了链表节点类Node,然后实现了函数printNthFromLast()
并使用双指针算法查找倒数第N个节点,最后编写了主函数来创建链表并测试printNthFromLast()
函数。
值得注意的是,我们没有在函数printNthFromLast()
中删除链表节点。如果需要删除链表节点,我们需要在程序结束时释放内存,否则可能会导致内存泄漏。
结论
在本篇文章中,我们介绍了如何使用C++编写程序,实现打印链表中倒数第N个节点的功能。我们通过定义链表节点类、实现双指针算法以及编写主函数来完成了这个任务。同时,我们还提醒读者注意内存释放的问题,以避免内存泄漏。