返回
JavaScript链表刷题(二):快乐树和反转链表
前端
2023-12-24 08:38:02
大家好,欢迎来到 JavaScript 链表刷题系列的第二篇。今天,我们将一起解决两道经典的链表问题:快乐树和反转链表。
我们先来了解一下这两道题目的背景。
快乐树
在数学中,快乐数是一种经过一系列运算后最终会变为 1 的正整数。例如,19 是一个快乐数,因为它的迭代计算如下:
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1
反转链表
链表是一种线性数据结构,由一组节点组成,每个节点包含一个值和指向下一个节点的指针。反转链表是指将链表中节点的顺序从头到尾翻转。
现在,我们开始解决这两道题目吧!
快乐树(JavaScript)
/**
* 判断一个数字是否为快乐数
*
* @param {number} n 要判断的数字
* @return {boolean} true/false
*/
const isHappyNumber = (n) => {
// 保存已经检查过的数字,避免陷入死循环
const set = new Set();
while (n !== 1) {
// 如果数字已经检查过,说明它不是快乐数
if (set.has(n)) {
return false;
}
// 将数字加入检查过的集合
set.add(n);
// 计算数字的平方和
let sum = 0;
while (n > 0) {
const digit = n % 10;
sum += digit * digit;
n = Math.floor(n / 10);
}
// 更新数字为平方和
n = sum;
}
// 如果数字最终变为 1,则它是快乐数
return true;
};
反转链表(JavaScript)
/**
* 反转链表
*
* @param {ListNode} head 链表的头节点
* @return {ListNode} 反转后的链表的头节点
*/
const reverseList = (head) => {
let prev = null;
let current = head;
while (current) {
// 保存下一个节点
const next = current.next;
// 反转当前节点的指针
current.next = prev;
// 更新 prev 和 current
prev = current;
current = next;
}
// 返回反转后的链表的头节点
return prev;
};
希望这两道题目的解答能够帮助你加深对 JavaScript 链表的理解。如果你有任何问题或建议,欢迎在下方留言。
如果你对 JavaScript 链表感兴趣,我强烈推荐你阅读以下资源:
祝你编码愉快!