链表与数组区别
- 数组增删非首尾时往往需要移动元素
- 链表增删非首尾元素不需要移动元素,只需要修改next指针的指向即可
链表实现与遍历
const a = { val: 'a' }
const b = { val: 'b' }
const c = { val: 'c' }
const d = { val: 'd' }
a.next = b
b.next = c
c.next = d
// 遍历链表
let p = a
while (p) {
console.log(p.val)
p = p.next
}
const e = { val: 'e' }
// 插入e到c与d之间
c.next = e
e.next = d
// 删除e
c.next = d
LeetCode 删除链表中的节点(237题)
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。
// 传入参数被删除的节点无法获取上一个节点,所以只能将下一个节点赋值给被删除的节点,删除复制的节点
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} node
* @return {void} Do not return anything, modify node in-place instead.
*/
var deleteNode = function(node) {
node.val = node.next.val;
node.next = node.next.next
};