链表

2021/11/22

# 单向链表

规范

  • 每个节点有下一个节点的指针
  • 可以拿到链表的长度
    • 末尾添加元素:append(ele)
    • 指定下标插入元素:appendAt(index, ele)
    • 末尾元素移除
    • 指定下标移除:delete(index)
    • updataAt(index, newEle)
    • get(index)
    • indexOf(element)
const ll = new LinkList();
ll.append('father')
.append('me')
.append('son')

ll.appendAt(1, 'mother');

console.log(ll.get(3)); // son
console.log(ll.indexOf('son')); // 3
ll.delete(0);
console.log(ll.indexOf('me')); // 1
ll.updateAt(0, 'daughter');
console.log(ll.indexOf('daughter')); // 0
复制成功
1
2
3
4
5
6
7
8
9
10
11
12
13

# 双向链表

规范

  • Node节点有头指针和尾指针
  • 记录长度
  • 尾部插入不用遍历,更方便
  • 通过下标取节点效率更高【判断index是否过半,从前往后和从后往前】
  • 反向遍历更方便
const dbll = new DBLinkList();
dbll.append('张三')
.append('李四')
.append('王五')

console.log(dbll.get(2)); // 王五
复制成功
1
2
3
4
5
6

# 206.反转链表

时间:88.33%
空间:37.73%

var reverseList =  function(head) {
    let prev = null;
    while (head) {
        let next = head.next;
        head.next = prev;
        prev = head;
        head = next;
    }
    return prev;
};
复制成功
1
2
3
4
5
6
7
8
9
10

# 82. 删除排序链表中的重复元素 II

  • 有序链表,删除所有重复的元素(只留不重复的)
const head = [1,2,3,3,4,4,5]
console.log(deleteDuplicates(head));
// 输出:[1,2,5]
复制成功
1
2
3

# 02.08. 双指针判断环及入口

  • 给定链表,判定环,无则返回null
  • 有则返回环入口节点

# 92. 反转链表 II

  • 指定起始反转和终止反转的坐标,反转这一个区域的链表段
const head = [1,2,3,4,5], left = 2, right = 4
console.log(reverseBetween(head, left, right));
// 输出:[1,4,3,2,5]
复制成功
1
2
3
上次更新: 6/13/2025
Powered By Valine
v1.4.16