算法思路 由于从加法从最后节点开始运算,所以我们可以用栈存,然后出栈做加法,生成节点就可以了。
数组转链表 1 2 3 4 5 6 7 8 9 10 11 12 13 const arrTransToLink = (arr ) => { let ans = null ; let i = 0 ; while (i < arr.length ) { let curNode = new ListNode (arr[i]); curNode.next = ans; ans = curNode; i++; } return ans; };
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 const transToArrAndRevert = (link ) => { const arr = []; while (link) { arr.push (Number (link.val )); link = link.next ; } return arr.reverse (); };const addZero = (arr, len ) => { while (len) { arr.push (0 ); len--; } };var addTwoNumbers = function (l1, l2 ) { const linkArr1 = transToArrAndRevert (l1); const linkArr2 = transToArrAndRevert (l2); const len = linkArr1.length - linkArr2.length ; if (len > 0 ) { addZero (linkArr2, len); } else if (len < 0 ) { addZero (linkArr1, Math .abs (len)); } let step = 0 ; let res = []; for (let i = 0 ; i < linkArr1.length ; i++) { const sum = linkArr1[i] + linkArr2[i] + step; if (sum > 9 ) { res.unshift (sum - 10 ); step = 1 ; } else { res.unshift (sum); step = 0 ; } } if (step === 1 ) { res.unshift (1 ); } let header = new ListNode (res[0 ]); let p = header; let l = 1 ; while (l < res.length ) { p.next = new ListNode (res[l]); p = p.next ; l++; } return header; };