我在 let 上发生错误forwardNode = currentNode.next.next
错误是"类型错误:无法读取 null 的"下一个"的属性。但是当我控制台时.log currentNode.next它不为空。
然后我分解let forwardNode = currentNode.next.next
为:
let forwardNode = currentNode.next
let forward = forwardNode.next
currentNode = forward
但是我得到了同样的错误。我被卡住了!我不知道我在这里忽略了什么。这是我的代码:
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @param {number} n
* @return {ListNode}
*/
var removeNthFromEnd = function(head, n) {
let currentNode = head
let currentIndex = 0
while (currentNode.next != null ) {
currentNode = currentNode.next
currentIndex++
}
//length of LL is known by currentIndex
//reset currentnode
currentNode = head
for (let i = 0; i<currentIndex-n; i++){
currentNode = currentNode.next
}
let forwardNode = currentNode.next.next
currentNode.next = forwardNode
return head
};
在代码的这一点上,currentNode
后面只有n
节点。如果n
是0
,currentNode.next
不存在,因此.next.next
根本不起作用。您只想在n
不为 0 时执行整个代码。
如果要删除的节点是最后一个节点的 2 个或最后一个节点的第一个节点,则此代码将不起作用。您需要明确处理这些用例。因为 current.next 在一种情况下可能为 null,而 current.next.next 在另一种情况下也可能为 null。