测试Linked List的removeKFromList函数时输出与预期不符求助
问题根因
你编写的removeKFromList函数的入参要求是**ListNode类实例构成的链表头节点**,但你调用时直接传入了普通数组,两者数据结构完全不匹配,导致逻辑无法正常执行:
- 你的链表节点自定义了
value存值、next存后继节点的属性,普通数组没有对应属性 - 函数执行时
while(current.next)判断一开始就不成立,循环没有执行,直接返回了你传入的原数组,所以输出和输入没有差异
另外补充:你写的链表删除逻辑本身是正确的,用虚拟头节点的写法也兼容了头节点就是待删除值的边界场景,没有问题。
修复方案
你可以补充两个工具函数,分别实现「数组转自定义链表」和「自定义链表转数组」的能力,再调用原有删除逻辑即可得到预期结果:
function ListNode(x) { this.value = x; this.next = null; } // 数组转自定义链表 function arrayToList(arr) { if (arr.length === 0) return null; let head = new ListNode(arr[0]); let current = head; for (let i = 1; i < arr.length; i++) { current.next = new ListNode(arr[i]); current = current.next; } return head; } // 自定义链表转数组 function listToArray(list) { let arr = []; let current = list; while (current) { arr.push(current.value); current = current.next; } return arr; } function removeKFromList(l, k) { let node = new ListNode(); node.next = l; let current = node; while(current.next) { if (current.next.value === k) { current.next = current.next.next } else { current = current.next; } } return node.next; } // 正确调用方式 const list = arrayToList([3, 1, 2, 3, 4, 5]); const processedList = removeKFromList(list, 3); console.log(listToArray(processedList)); // 输出 [1,2,4,5]
内容的提问来源于stack exchange,提问作者tseeker
相关产品推荐
相关产品推荐

