JavaScript 使用递归添加两个链表值

标签 javascript linked-list

我有以下代码,花了 6 个小时尝试解决,但没有成功。它被 1 -> 8, 0 -> null 的 LinkedList 作为输入卡住了。我的输出只是 1 -> null,我不知道为什么。我尝试手动执行我的代码,它应该创建新的“next = {val: 8, next: null}”,但它没有发生......

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} l1
 * @param {ListNode} l2
 * @return {ListNode}
 */


const traversal = function(l1, l2, s, n) {
    if (l1 !== null && l2 !== null) {
        n.val = l1.val + l2.val + s;
    } else if (l1 !== null && l2 === null && !s) {
        n.val = l1.val + s;
    } else if (l1 === null && l2 !== null && !s) {
        n.val = l2.val + s;
    } else if (l1 === null && l2 === null && s) {
        n.val = s
    }
    s = 0;
    if (n.val > 9) {
        s = Number(n.val.toString()[0])
        n.val = Number(n.val.toString()[1])
    }
    if (l1 === null && l2 === null && !s) {
        return;
    }
    if (l1 !== null && l2 !== null && l1.next && l2.next) {
        n.next = new ListNode
        traversal(l1.next, l2.next, s, n.next)
    } else if (l1 !== null && l2 === null && l1.next !== null && l2.next === null) {
        n.next = new ListNode
        traversal(l1.next, null, s, n.next)
    } else if (l1 === null && l2 !== null && l1.next === null && l2.next !== null) {
        n.next = new ListNode
        traversal(null, l2.next, s, n.next)
    } else if (l1.next === null && l2.next === null && s) {
        n.next = new ListNode
        traversal(null, null, s, n.next)
    }

}

var addTwoNumbers = function(l1, l2) {
    let storage = 0;
    const result = new ListNode
    traversal(l1, l2, storage, result)
    //console.log(result.next)
    return result
};

最佳答案

好吧,我真的不知道你的代码在做什么,对此我深表歉意,但我自己解决这个问题确实很有趣,所以这是我使用 ES6 的完整解决方案。如果您想查看它的实际效果并尝试一下,您可以将整个代码放入 index.js 中并使用 Node.js 运行它,或者将其插入 Leetcode 中进行验证。

function ListNode(val) {
  this.val = val;
  this.next = next;
}

const getValue = (stringVal, node) => {
  return node.next === null
    ? Number(node.val + stringVal)
    : Number(getValue(node.val + stringVal, node.next))
}

const listify = number => number.toString()
  .split('')
  .map(Number)
  .reduce((next, digit) => {
    const node = new ListNode(digit)
    node.next = next
    return node
  }, null)

const addTwoNumbers = (l1, l2) => {
  return listify(getValue('', l1) + getValue('', l2))
}

const first = { val: 2, next: { val: 4, next: { val: 3, next: null} } }
const second = { val: 5, next: { val: 6, next: { val: 4, next: null} } }

addTwoNumbers(first, second)

关于JavaScript 使用递归添加两个链表值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54359146/

相关文章:

c - 需要对名称链接列表进行合并排序

c - 链接列表输出未正确显示

c++ - 自定义链表使用具有链表的结构创建 RtlValidateHeap 错误

尝试匹配 URL 的 JavaScript 正则表达式语法错误会导致意外标记 ^

javascript - 如何根据 JSON 属性名称替换字符串值

java - 链表循环潜在异常

c - C 链表中的冒泡排序

javascript - 多个列表和按钮,但文本输入未保存在正确的列表中

javascript - Mongoose 嵌入式文档更新

javascript - 无法隐藏 DIV