deleteNodeNoPointer(node) {
node.val = node.next.val;
node.next = node.next.next;
return node;
}
如何将单链列表节点的指针传递给该函数
例如,如果first是该类的对象, 我们有链表
1-> 2-> 3-> 4-> 5->空; 并且我们必须将3的指针发送到上面的函数。
first.deleteNodeNoPointer(---POINTER--OF--NODE 3--IN--SINGLYLINKEDLIST);
答案 0 :(得分:0)
您拥有的功能要求您传递对节点的引用以进行删除。因此,您将从列表的开头开始,遍历该列表,使每个节点成为下一个节点,直到到达要删除的节点为止。您可能会循环执行此操作,直到找到通常满足某些条件的节点为止。但是,如果您要删除第三个节点,那将是head.next.next
;
class ListItem{
constructor(val, next = null){
this.val = val;
this.next = next;
}
}
/* work to make the list */
let head = new ListItem(1);
let cur = head;
for(let i = 2; i < 10; i++){
cur.next = new ListItem(i);
cur = cur.next;
}
/* prints the list for demo */
function printList(node){
while(node != null){
console.log(node.val);
node = node.next;
}
}
function deleteNodeNoPointer(node) {
node.val = node.next.val;
node.next = node.next.next;
return node;
}
console.log('before deletion');
printList(head);//list is setup
let thirdNode = head.next.next;//get the third node
deleteNodeNoPointer(thirdNode);//remove the third node
console.log('after deletion');
printList(head);
请注意,如果您实际上拥有头部,则可以通过分配已删除节点的父节点的next
值(存储在已删除节点的{{ 1}};
next
由于nodeBefore.next = nodeBefore.next.next;
函数是围绕此方法的一种破解方式,因此它假定您无权访问父节点。无论哪种方式,您都需要一个变量,该变量持有要删除的节点的引用,然后将其传递给函数。