LeetCode 两数相加

先设计两个函数

第一个数组转链表

第二个链表转数组

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

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)
        }
};

 

你可能感兴趣的:(力扣力扣!)