链表简介
1.多个元素组成的列表。
2.元素的存储不连续,用next指针连在一起。
数组 vs 列表
- 数组:增删非手尾元素时往往需要移动元素。如果要在数组中增加一个元素,数组后面的所有元素需要往后面移动一位。如果在数组中删除一个元素,后面的元素都要往前移动一位。
- 链表:增删非首尾元素,不需要移动元素,只需要更改next指针。
- javascript中是没有链表数据结构,但是可以使用Object模拟一个链表。
模拟链表数据结构(其实就是一个嵌套的Object)
const a = {
value: 'a'}
const b = {
value: 'b'}
const c = {
value: 'c'}
const d = {
value: 'd'}
a.next = b
b.next = c
c.next = d
链表的操作:
// 构建链表
const a = {
value: 'a'}
const b = {
value: 'b'}
const c = {
value: 'c'}
const d = {
value: 'd'}
a.next = b
b.next = c
c.next = d
// 遍历链表
// 声明一个指针p(point),然后在循环里面更改p=p.next,然后在这个位置就可以访问链表里面的元素了。
let p = a
while(p) {
console.log(p.value)
p = p.next
}
// 插入(在c,d中间插入一个e元素):
const e = {
value: 'e' }
c.next = e
e.next = d
// 删除e(改变next指针)
c.next = d
leetCode: 237.删除链表中的节点
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。
var deleteNode = function