通过javascript中的函数传递单链列表节点的指针

时间:2018-10-12 15:13:11

标签: javascript

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);

1 个答案:

答案 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; 函数是围绕此方法的一种破解方式,因此它假定您无权访问父节点。无论哪种方式,您都需要一个变量,该变量持有要删除的节点的引用,然后将其传递给函数。