LeetCode 2、两数相加

先设计两个函数

第一个数组转链表

第二个链表转数组

整体思路为先把传入的两个链表转成数组,执行加法运算之后将结果转成链表输出。

AC代码

var addTwoNumbers = function(l1, l2) {
        function node2arr(listNode) {
            let arr = []
            do {
                arr.push(listNode.val)
                listNode = listNode.next
            } while (listNode)
            return arr.reverse()
        }

        function arr2listnode(arr) {
            let head = new ListNode(arr[0])
            let point = head
            let i = 1
            while (i != arr.length) {
                point.next = new ListNode(arr[i])
                point = point.next
                i++
            }
            return head
        }

        if (l1.next == null && l1.val == 0)
            return l2
        else if (l2.next == null && l2.val == 0)
            return l1
        else {
            let arr_1 = node2arr(l1)
            let arr_2 = node2arr(l2)
            let length = Math.abs(arr_1.length-arr_2.length)
            if (arr_1.length > arr_2.length)
                for (let i = 0; i < length; i++)
                    arr_2.unshift(0)
            else if(arr_2.length>arr_1.length)
                for (let i = 0; i < length; i++)
                    arr_1.unshift(0)

            let result = []
            let flag = 0

            for (let i = arr_1.length - 1; i >= 0; i--) {
                let sum = arr_1[i] + arr_2[i] + flag
                result.push(sum >= 10 ? sum - 10 : sum)
                flag = sum >= 10 ? 1 : 0
            }
            if (flag == 1)
                result.push(flag)

            return arr2listnode(result)
        }
};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值