返回
前端菜鸟如何攻克链表两数相加?详解JavaScript解题思路
前端
2024-02-17 08:56:31
序言
对于初学前端的开发者来说,算法题无疑是一座令人望而生ጪ的高山。然而,通过循序渐进的学习和练习,我们可以逐步攻克这些难题。本文将带领大家深入浅出地学习如何使用JavaScript解决经典的链表两数相加问题,为前端算法之路添砖加瓦。
链表两数相加简介
两数相加问题是链表算法中一个基础且重要的题目。其任务是将两个以链表形式存储的非负整数相加,并返回结果也是一个链表。
JavaScript解题思路
1. 定义链表节点
首先,我们需要定义一个链表节点的构造函数,其中包含指向下一个节点的指针和存储的数据值。
class Node {
constructor(data) {
this.data = data;
this.next = null;
}
}
2. 创建两个链表
接下来,创建两个链表,分别表示两个要相加的非负整数。例如:
const num1 = new Node(2);
num1.next = new Node(4);
num1.next.next = new Node(3);
const num2 = new Node(5);
num2.next = new Node(6);
num2.next.next = new Node(4);
3. 定义相加函数
编写核心相加函数,该函数将接收两个链表作为参数,逐位相加,并返回结果链表。
const addTwoNumbers = (l1, l2) => {
let carry = 0;
let dummyHead = new Node(0);
let current = dummyHead;
while (l1 || l2 || carry) {
const sum = (l1 ? l1.data : 0) + (l2 ? l2.data : 0) + carry;
carry = Math.floor(sum / 10);
current.next = new Node(sum % 10);
current = current.next;
l1 = l1 ? l1.next : null;
l2 = l2 ? l2.next : null;
}
return dummyHead.next;
};
步骤详解:
- 逐位相加:遍历两个链表,逐位相加当前节点的数据值和进位值。
- 进位处理:如果相加结果大于等于10,则将进位值进位到下一位。
- 创建结果链表:使用一个虚拟头结点dummyHead来跟踪结果链表,并逐步添加新节点。
- 遍历至链表结束:持续遍历直到两个链表均为空且进位值为0。
4. 输出结果
调用addTwoNumbers函数,将两个链表相加,并打印结果链表中的数据值。
const result = addTwoNumbers(num1, num2);
console.log("相加结果:");
while (result) {
console.log(result.data);
result = result.next;
}
示例代码
class Node {
constructor(data) {
this.data = data;
this.next = null;
}
}
const addTwoNumbers = (l1, l2) => {
let carry = 0;
let dummyHead = new Node(0);
let current = dummyHead;
while (l1 || l2 || carry) {
const sum = (l1 ? l1.data : 0) + (l2 ? l2.data : 0) + carry;
carry = Math.floor(sum / 10);
current.next = new Node(sum % 10);
current = current.next;
l1 = l1 ? l1.next : null;
l2 = l2 ? l2.next : null;
}
return dummyHead.next;
};
const num1 = new Node(2);
num1.next = new Node(4);
num1.next.next = new Node(3);
const num2 = new Node(5);
num2.next = new Node(6);
num2.next.next = new Node(4);
const result = addTwoNumbers(num1, num2);
console.log("相加结果:");
while (result) {
console.log(result.data);
result = result.next;
}
结语
通过本文的讲解,我们掌握了使用JavaScript解决链表两数相加问题的详细步骤。从链表节点定义到核心相加函数的设计,再到输出结果,每一个环节都清晰明了。理解了本算法的精妙之处,相信大家在今后的算法学习中会更加游刃有余。