1.链表的概念
多个元素组成的列表,元素存储不连续,用next指针连在一起
1.1链表与数组的区别
链表设计的这么复杂怎么不用数组来代替?
数组:增删非首尾元素时往往都需移动元素的位置
let list = [1,2,3,4]
let a = list.findIndex(item=>item ===2)
list.splice(a,1)
console.log(list); //1 3 4 ,我们看到了3的索引由之前的2变成了1
链表:增删非首尾元素时,是不需要移动元素的位置,只需改变next指针即可
js中是没有链表这个数据结构,我们可以通过Object的特性来模拟链表
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
console.log(a);
// 遍历链表
var p = a // 先建一个指针指向a
while(p) {
console.log(p.val);
p = p.next //第一次循环的时候 p.next就是b
}
// 操作链表就是改变指针(next)的 指向
// 插入e 到 c,d之间
const e = {val:'e'}
c.next = e
e.next = d
console.log(d);
// 删除e 就是不指向
c.next = d
console.log(a);
leetcode案例题
思路:
node 表示当前节点
设链表为[4,5,1,9] 删除节点为5
1.我们把当前节点值改为下个节点的值
node.val = node.next,val 此时我们的链表就变为[4,1,1,9]
2 删除的方式就是指向下个节点,把当前节点设为下下个节点即为删除指定位置节点 [4,1,9]
node.next = node.next.next
var deleteNode = function(node) {
node.val = node.next.val
node.next = node.next.next
};