研习算法第三站-链表(javascript版)

206 阅读1分钟

链表简介

  • 多个元素组成的列表
  • 元素存储不连续,用next指针连在一起
  • javascript没有链表,可以用Object数据结构模拟链表的功能 WX20211019-234516@2x.png
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" };
a.next = e;
e.next = b;

// 删除
a.next = b;

数组 VS 链表

  • 数组: 增删非首尾元素时往往需要移动其他元素。
  • 链表: 增删非首尾元素,不需要移动其他元素,只需求修改next指向即可

leetcode-cn.com 算法题实战

完整题目请打开 leetcode

237. 删除链表中的节点

image.png

解题思路

  • 无法直接获取当前被删除的节点的上个节点
  • 将被删除节点下个数据转移到自身,删除下个节点,自己使用下个节点的数据链接下下个节点
/**
 * 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;
};

下一站 集合