1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| //假设需要往链表head中的第n个节点插入val值,注意链表与数组一样下标从0开始 //首先声明一个变量并将head赋值给这个变量 let cur = head
方法一:不使用虚拟节点
//如果不使用虚拟节点的话,得分两种情况,第一种删除头节点,第二种删除后面的节点
//插入头节点 if(n==0){ head = new ListNode(val,head) }else{ //移动到第n-1个节点前 while(n>1){ //从n减到1,这时cur到n-1节点前,如果加了虚拟头节点,这时的判断条件为0 cur = cur.next n -- } let node = new ListNode(val) /*注意这里先把cur.next先赋给node.next,如果反过来先让cur.next变成node.next,再让cur.next赋给node.next,这时cur.next已经是node,相当于自己指向自己。这里有点像两个变量交换。假设有a,b两个变量,交换a,b两个变量的值,不用解构赋值的话 let c = a a = b b = c */ node.next = cur.next cur.next = node }
方法二:使用虚拟头节点 let cur = new ListNode(0,head) let head = cur while(n){ cur = cur.next n-- } let node = new ListNode(val) node.next = cur.next cur.next = node head = head.next //最后注意去除虚拟头节点
|