js实现链表操作,计算两个链表对应数之和

最近在网上看到一道题,题目如下:

给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。

你可以假设除了数字 0 之外,这两个数字都不会以零开头。

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

大多数都是通过java来实现的,js我也是第一回用来写链表,下边是代码实现,不正之处,请指正:

// 构建链表数据结构对象
function ListNode (val) {
        this.val = val
        this.next = null
      }
// 计算两个链表之和的方法
function addTwoNumbers(l1, l2) {
        let x1 = 0
        let x2 = 0
        x1 = (x2 + l1.val + l2.val) % 10
        x2 = Math.floor((x2 + l1.val + l2.val) / 10)
        let l3 = new ListNode(x1)
        l1 = l1.next
        l2 = l2.next
        while (l1 || l2) {
          if (!l1) {
            l1 = new ListNode(0)
          }
          if (!l2) {
            l2 = new ListNode(0)
          }
          x1 = (x2 + l1.val + l2.val) % 10
          x2 = Math.floor((x2 + l1.val + l2.val) / 10)
          let l4 = new ListNode(x1)
          let l5 = l3
          while (l5.next) {
            l5 = l5.next
          }
          l5.next = l4
          l1 = l1.next
          l2 = l2.next
        }
        if (!l1 && !l2) {
          if (x2 !== 0) {
            let l6 = new ListNode(x2)
            let l7 = l3
            while (l7.next) {
              l7 = l7.next
            }
            l7.next = l6
          }
        }
        return l3
      }
// 测试函数
(function test() {
    // 构建第一个节点
    let l1 = new ListNode(2)
    let l1x = new ListNode(4)
    let l1y = new ListNode(3)
    l1.next = l1x
    l1x.next = l1y
    console.log(l1.next.next.val)
    // 构建第二个节点
    let l2 = new ListNode(5)
    let l2x = new ListNode(6)
    let l2y = new ListNode(4)
    l2.next = l2x
    l2x.next = l2y
    console.log(l2.next.next.val)
    addTwoNumbers(l1, l2)
})()

链表作为一种数据结构,在前端使用的的确是很少,但是作为一名全栈程序员,还是应该略懂其原理,最好可以亲自实现一遍

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值