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

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

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

在实际的应用场景中,我们经常需要查找链表中最后 N 个节点的总和。例如,一个销售网站需要统计最近 N 天的访问量,就需要找到最近 N 天的访问量并计算其总和。本文将介绍如何使用 Javascript 查找给定链表的最后 N 个节点并计算其总和。

链表的实现

链表是一种常见的数据结构,它由一系列节点组成,每个节点包含一个元素和一个指向下一个节点的链接。链表的基本操作包括插入节点、删除节点和遍历节点。

在 JavaScript 中,我们可以使用对象来实现链表。例如:

class Node {
  constructor(value) {
    this.value = value;
    this.next = null;
  }
}

class LinkedList {
  constructor() {
    this.head = null;
    this.tail = null;
    this.length = 0;
  }

  push(value) {
    const node = new Node(value);

    if (!this.head) {
      this.head = node;
      this.tail = node;
    } else {
      this.tail.next = node;
      this.tail = node;
    }

    this.length++;
  }

  pop() {
    if (!this.head) {
      return null;
    }

    let current = this.head;
    let newTail = current;

    while (current.next) {
      newTail = current;
      current = current.next;
    }

    this.tail = newTail;
    this.tail.next = null;

    if (this.length === 1) {
      this.head = null;
      this.tail = null;
    }

    this.length--;

    return current;
  }
}

上述代码实现了一个简单的链表,其中包含了 push 和 pop 两个方法。可以通过 push 方法向链表中添加节点,也可以通过 pop 方法从链表中删除节点。

查找最后 N 个节点的总和

以下是一种查找给定链表的最后 N 个节点并计算其总和的方法:

function sumOfLastN(list, n) {
  let sum = 0;
  let length = 0;
  let current = list.head;

  while (current) {
    length++;
    current = current.next;
  }

  if (length < n) {
    return sum;
  }

  current = list.head;

  for (let i = 0; i < length - n; i++) {
    current = current.next;
  }

  while (current) {
    sum += current.value;
    current = current.next;
  }

  return sum;
}

该方法首先计算链表的长度,然后根据长度计算需要遍历的节点数。最后遍历相应的节点,并计算它们的总和。

使用示例

以下是一个使用示例:

const list = new LinkedList();

list.push(1);
list.push(2);
list.push(3);
list.push(4);
list.push(5);

console.log(sumOfLastN(list, 3)); // 12

在该示例中,我们创建了一个包含 5 个节点的链表,并查找了最后三个节点,计算它们的总和。