function creatListNode(val) {
return {
value: val,
next: null
}
}
1.数组转换成链表
function arrayToList(array) {
var dummy = creatListNode(0)
var prevNode = dummy
for (var i = 0; i < array.length; i++) {
var node = creatListNode(array[i])
prevNode.next = node
prevNode = node
}
return dummy.next
}
2.链表转换成数组
function listToArray(head) {
var array = []
var p = head
while (p) {
array.push(p.value)
p = p.next
}
return array
}
3.接受一个元素和一个链表,然后创建一个新的链表,将元素添加到输入链表的开头
function prepend(val, head) {
var node = creatListNode(val)
node.next = head
return node
}
4. 接受一个元素和一个链表,然后创建一个新的链表,将元素添加到输入链表的末尾
function append(val, head) {
var node = creatListNode(val)
if (!head) {
return node
}
var p = head
while (p.next) {
p = p.next
}
p.next = node
return head
}
5. 接受一个链表和一个数,并返回链表中指定位置的元素,如果该元素不存在则返回undefined
function nth(head, n) {
if (n < 0) {
return
}
var count = 0
var p = head
while (p && count < n) {
p = p.next
count++
}
return p ? p.value : undefined
}
还可以简化成如下:
function nth(head, n) {
if (n < 0) {
return
}
var p = head
while (p && n--) {
p = p.next
}
return p ? p.value : undefined
}
递归版本:
function nth(head, n) {
if (!head || n < 0) {
return undefined
}
if (n == 0) {
return head.value
}
return nth(head.next, n--)
}