在Node.js中将嵌套对象链表转换为数组
如何将嵌套对象形式的链表转换为数组(Node.js)
这有两种实用的实现方式,迭代和递归,都能完美满足你的需求:
迭代实现(推荐,避免栈溢出)
迭代是最稳妥的方案,尤其适合较长的链表,不会出现递归导致的栈溢出问题:
function linkedListToArray(head) { const result = []; let current = head; // 遍历直到当前节点为null while (current !== null) { // 把字符串类型的val转为数字,匹配你的期望输出 result.push(Number(current.val)); // 移动到下一个节点 current = current.next; } return result; } // 测试你的输入示例 var ii = {"val":"1","next":{"val":"2","next":{"val":"3","next":{"val":"4","next":{"val":"5","next":null}}}}}; console.log(linkedListToArray(ii)); // 输出: [1,2,3,4,5]
思路解释
- 初始化一个空数组
result用来存储最终结果 - 用
current指针从链表的头部(也就是你传入的ii)开始遍历 - 每次循环把当前节点的
val转成数字后推入数组,然后将current指向next节点 - 当
current变成null时,说明已经遍历完所有节点,返回结果数组
递归实现(简洁但注意链表长度)
如果你的链表长度不会太长,递归写法会更简洁直观:
function linkedListToArrayRecursive(head) { // 递归终止条件:当前节点为null时返回空数组 if (head === null) return []; // 拼接当前节点的值和下一个节点递归的结果 return [Number(head.val), ...linkedListToArrayRecursive(head.next)]; } // 测试 console.log(linkedListToArrayRecursive(ii)); // 输出: [1,2,3,4,5]
思路解释
- 递归的核心是拆分问题:把当前节点的值和“剩余链表转换的数组”拼接起来
- 当遇到
null节点时,递归结束,返回空数组作为拼接的基础
小提示
如果你的链表节点val本身就是数字类型(不是字符串),只需要去掉Number()转换即可,直接使用current.val就好。
内容的提问来源于stack exchange,提问作者Chandan Kumar
相关产品推荐
相关产品推荐

