📌  相关文章
📜  C++ 程序查找给定链表的最后 N 个节点的总和(1)

📅  最后修改于: 2023-12-03 14:39:55.889000             🧑  作者: Mango

C++程序:查找给定链表的最后N个节点的总和

介绍

这个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个节点的总和。

注意事项
  • 本程序适用于单链表。如果链表为空或链表长度小于N,则返回总和为0。
  • 请确保输入的N值大于0,否则函数可能出现错误。