一、数组和链表的区别
数组在内存中占据连续的内存空间,遍历通过索引访问对应的元素
链表在内存中是分散的,拥有数据域val和指针域next,指针域中存放着下一个后继节点的内存地址,遍历从起始结点开始,逐个访问next。
1.创建链表
es5的写法,用构造器创建对象,参数val,给指针赋值为null
function ListNode(val) {
this.val = val
this.next = null
}
const node1 = new ListNode(1)
const node2 = new ListNode(2)
node1.next = node2
2.在链表中间添加元素
比如上面1的node1 -> node2, 现在想在中间插入node3,形成node1 -> node3 -> node2
const node3 = new ListNode(3)
node3.next = node1.next
node1.next = node3
3.链表删除元素
使用上面2中的node1 -> node3 -> node2,现在想删除元素node3
node1.next = node1.next.next
node1.next.next = null
从上面可以看出,删除目标结点真正需要定位的是目标结点的前驱结点
二、js中的数组
1.如果数组中定义的是基本数据类型,那么在内存中占据的是一片连续的内存 2.如果数组中定义了对象,那么在内存中就不连续了,底层使用hash映射分配内存空间,是由对象链表实现的
1.访问链表
比如要访问第10的元素
// 在普通数组中:arr[9]
在链表中
let node = head
for (let i = 0; i < index && node; i ++){
node = node.next)
}