數組轉鏈表,易懂版
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
for(var i = 1; i < ary.length; i++) {
node = {value: ary[i], next:null}
pnode.next = node
pnode = node
}
return head
}
數組轉鏈表,遞歸版,佔用的棧空間爲O(n)。
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)
。