概念
- 多个元素组成的链表
- 元素存储不连续,用next指针连在一起
数组VS链表
- 数组:增删非首位元素往往需要移动元素
- 链表:增删非首位元素,不需要移动元素,只需要更改next的指向即可
JS中的链表
- JavaScript中没有链表
- 可以用Object模拟链表
const a = { val: "a" };
const a = { val: "b" };
const a = { val: "c" };
const a = { 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" };
c.next = e;
e.next = d;
//删除
c.next = d;
e.next = null;
e = null;
删除链表中的节点 LeetCode 237
解题思路
- 将被删除节点的值改为下个节点
- 将被删除节点的next指针指向下下个节点
var deleteNode = function(node) {
node.val = node.next.val;
node.next = node.next.next;
};
反转链表 LeetCode 206
解题思路
- 反转两个节点:将n+1的next指向n
- 反转多个节点:双指针遍历链表,重复上述操作
双指针操作指的是,一个是正常遍历,一个是比正常顺序晚一位。
- 正常顺序 4 1 5 9
- 晚一位顺序 null 4 1 5 9
var reverseList = function(head) {
let p = head;
let p1 = null;
while (p) {
let temp = p.next;
p.next = p1;
p1 = p;
p = temp;
}
return p1;
};