链表简介
- 多个元素组成的列表
- 元素存储不连续,用next指针连在一起
双向链表
- 追加 (push) - O(1)
- 索引 访问/修改(A[idx]=...)- O(n)
- 插入(insert) - O(1)
- 删除(delete/remove) - O(1)
- 合并 - O(1)
单向链表 (先简单说明下)
- 头指针-指向链表的第一个节点
- 链表节点包括key和next指针
- key 可以是数据或卫星数据的地址
- next 指针指向下一个链表节点
节点内部
程序表示
向空链表中插入元素
- 创建一个空链表,HEAD指针指向null const list = new LinkedList()
2. 创建一个包含数据1的节点 const node = new ListNode(1)
3. 将HEAD 指针指向节点 list.head = node
4. 在数据节点1 插入数据节点2
- 创建一个包含数据2的节点 const node2 = new ListNode(2)
- 将节点2的next指针指向节点1 node2.next = node
- 调整HEAD指针指向节点2 list.head = node2
插入方法
在链表中查找节点 O(n)
已知节点2,删除节点2
双向链表
程序表示
双向链表删除元素2
其他问题
- 双向链表的插入 - O(1)
- 双向链表的索引 - O(n)
- 双向链表的合并 - O(m + n)