数组转链表,易懂版
function array2list(ary) {
if(ary.length === 0) {
return null
}
var nodes = []
for(var i = 0; i < ary.length; i++) {
var node = {}
node.value = ary[i]
node.next = null
nodes.push(node)
}
for(var i = 0; i < nodes.length - 1; i++) {
nodes[i].next = nodes[i + 1]
}
return nodes[0]
}
function array2list(ary) {
if(!ary.length) {
return null
}
var node
var head = {value: ary[0], next: null}
var pnode = head //pnode变量用来保存前一个节点
for(var i = 1; i < ary.length; i++) {
node = {value: ary[i], next:null}
pnode.next = node //将前一个节点的next指向当前节点
pnode = node //将node赋值给pnode
}
return head
}
function array2list(ary, start = 0) {
if(start === ary.length) {
return null
}
var node = {
value: ary[start],
next: null
}
var rest = array2list(ary, start + 1)
node.next = rest
return node
}
function list2array(head) {
if(!head) {
return []
}
var result = []
var p = head
while(p) {
result.push(p.value)
p = p.next
}
return result
}
function list2array(head) {
if(!head) {
return []
}
var result = [head.value]
var restValues = list2array(head.next)
return result.concat(restValues)
}
- 数组是连续存储的,而链表不是连续存储的。
- 数组可以随机访问,而链表不能,查找只能顺着链子遍历下去。
- 数组的插入操作为
O(n)
,而链表的插入操作为O(1)
。