2. 两数相加.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /*
  2. * @Description:
  3. * @Autor: kindring
  4. * @Date: 2022-05-17 14:04:16
  5. * @LastEditors: kindring
  6. * @LastEditTime: 2022-05-17 16:09:40
  7. * @LastDescript:
  8. */
  9. /**
  10. * Definition for singly-linked list.
  11. * function ListNode(val, next) {
  12. * this.val = (val===undefined ? 0 : val)
  13. * this.next = (next===undefined ? null : next)
  14. * }
  15. */
  16. function ListNode(val, next) {
  17. this.val = (val === undefined ? 0 : val)
  18. this.next = (next === undefined ? null : next)
  19. }
  20. let l = ATL([1, 2, 3]);
  21. // console.log(l);
  22. /**
  23. * 数组转链表,递归版本
  24. */
  25. function ATL(arr, i = 1, _l) {
  26. if (i > arr.length) {
  27. return null;
  28. }
  29. if (!_l) {
  30. _l = new ListNode(arr[0])
  31. }
  32. _l.next = ATL(arr, i + 1, new ListNode(arr[i]))
  33. return _l
  34. }
  35. /**
  36. * @param {ListNode} l1
  37. * @param {ListNode} l2
  38. * @return {ListNode}
  39. */
  40. var addTwoNumbers = function(l1, l2) {
  41. let prevValue = 0;
  42. // 总返回用的表
  43. let r = new ListNode()
  44. let t = r;
  45. let arr = []
  46. // 以l1 为基准.将l1中的所有值进行添加
  47. while (l1 || l2) {
  48. // console.log(l1);
  49. let v1 = l1 ? l1.val : 0,
  50. v2 = l2 ? l2.val : 0;
  51. let v = (v1 + v2 + prevValue) % 10;
  52. prevValue = ~~((v1 + v2 + prevValue) / 10);
  53. arr.push(v);
  54. l1 = l1 ? l1.next : null;
  55. l2 = l2 ? l2.next : null;
  56. if (!t) {
  57. t = new ListNode();
  58. r.val = v;
  59. r.next = t;
  60. } else {
  61. t.val = v;
  62. if (!l1 && !l2) {
  63. if (prevValue) {
  64. t.next = new ListNode(prevValue);
  65. }
  66. return r;
  67. }
  68. t.next = new ListNode()
  69. t = t.next
  70. }
  71. }
  72. return r;
  73. };
  74. let _1 = ATL([1, 2]);
  75. let x = addTwoNumbers(_1, ATL([2, 3, 4]))
  76. console.log(x);
  77. console.log(x.next);
  78. console.log(x.next.next);
  79. let n1 = ATL([9, 9, 9, 9, 9, 9, 9])
  80. let n2 = ATL([9, 9, 9, 9])
  81. let x2 = addTwoNumbers(n1, n2)
  82. console.log(x2.next.val);
  83. console.log(x2.next.next.val);
  84. console.log(x2.next.next.next.val);
  85. console.log(x2.next.next.next.next.val);
  86. console.log(x2.next.next.next.next.val);
  87. console.log(x2.next.next.next.next.next.next.val);
  88. console.log(x2.next.next.next.next.next.next.next.val);
  89. console.log(x2.next.next.next.next.next.next.next.next.val);