📅  最后修改于: 2023-12-03 14:39:55.889000             🧑  作者: Mango
这个C++程序用于查找给定链表(单链表)的最后N个节点的总和。它通过遍历链表,找到倒数第N个节点,并计算这些节点的数值总和。本程序可以帮助程序员快速获取链表中最后N个节点的总和。
以下是一个使用示例,展示了如何使用本程序来查找链表的最后3个节点的总和。
#include <iostream>
using namespace std;
// 定义链表节点结构
struct ListNode {
int value;
ListNode* next;
ListNode(int val) : value(val), next(NULL) {}
};
// 定义函数,查找链表的最后N个节点的总和
int findLastNNodeSum(ListNode* head, int N) {
if (head == NULL || N <= 0) {
return 0;
}
ListNode* slow = head;
ListNode* fast = head;
int count = 0;
// 移动fast指针,直到与slow指针相隔N个节点
while (fast != NULL && count < N) {
fast = fast->next;
count++;
}
// 如果fast指针为空,说明链表长度小于N
if (fast == NULL) {
return 0;
}
// 同时移动slow和fast指针,直到fast指针到达链表末尾
while (fast->next != NULL) {
slow = slow->next;
fast = fast->next;
}
// 计算最后N个节点的总和
int sum = 0;
while (slow != NULL) {
sum += slow->value;
slow = slow->next;
}
return sum;
}
int main() {
// 创建链表
ListNode* head = new ListNode(1);
ListNode* node1 = new ListNode(2);
ListNode* node2 = new ListNode(3);
ListNode* node3 = new ListNode(4);
ListNode* node4 = new ListNode(5);
head->next = node1;
node1->next = node2;
node2->next = node3;
node3->next = node4;
// 查找最后3个节点的总和
int sum = findLastNNodeSum(head, 3);
cout << "The sum of last 3 nodes is: " << sum << endl;
// 释放链表内存
ListNode* temp = NULL;
while (head != NULL) {
temp = head->next;
delete head;
head = temp;
}
return 0;
}
上述示例代码的运行结果应该会输出以下内容:
The sum of last 3 nodes is: 12
这表示链表最后3个节点的总和为12。
此程序使用快慢指针的思想来查找链表的最后N个节点的总和。首先,使用快指针移动N步,使快指针与慢指针相隔N个节点。然后,同时移动快指针和慢指针,直到快指针到达链表末尾。最后,从慢指针开始,累加每个节点的数值,即可得到最后N个节点的总和。