力扣100题 2-两数相加(ListNode)

139 阅读1分钟

ListNode

  • ListNode 是一种用于表示链表节点的类,在 JavaScript 中通常用于实现单链表或双链表等数据结构。链表是一种动态数据结构,其中每个节点包含数据和一个指向下一个节点的引用。以下是 ListNode 在 JavaScript 中的用法以及一些常见操作示例。
class ListNode{ 
     constructor(val = 0, next = null) { 
     this.val = val; // 节点的值 
     this.next = next; // 指向下一个节点的指针(引用) 
        } 
}
  • val: 存储节点的值。
  • next: 指向下一个节点的引用,如果没有下一个节点,则为 null

题目

  • 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

输入: l1 = [2,4,3], l2 = [5,6,4]

输出: [7,0,8]

解释: 342 + 465 = 807

解答

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} l1
 * @param {ListNode} l2
 * @return {ListNode}
 */
var addTwoNumbers = function (l1, l2) {
    let addOne = 0 //进位
    let num = new ListNode('0') // 创建一个头链表用于保存结果
    let head = num // 保存头链表的位置用于最后的链表返回
    while (l1 || l2 || addOne) { //在进位或者两个链表之中有一个存在的前提下执行下面的逻辑
        let val1 = l1 === null ? 0 : l1.val
        let val2 = l2 === null ? 0 : l2.val
        let r1 = val1 + val2 + addOne
        addOne = r1 >= 10 ? 1 : 0
        num.next = new ListNode(r1 % 10)
        num = num.next
        if (l1) l1 = l1.next
        if (l2) l2 = l2.next
    }
    return head.next
};