📅  最后修改于: 2023-12-03 15:31:45.354000             🧑  作者: Mango
在实际的应用场景中,我们经常需要查找链表中最后 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 个节点并计算其总和的方法:
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 个节点的链表,并查找了最后三个节点,计算它们的总和。