前言
记录一下自己链表的学习心得!话不多说,直接上题!
题目
1、输入一个链表,按链表值从尾到头的顺序返回一个数组
2、输入一个链表,反转链表后,输出新链表的表头
核心思路:将当前节点的next指针的指向,由下个节点改为上个节点!!!
直接看代码
// 测试链表
const seven = { val: 7, next: null }
const six = { val: 6, next: seven }
const five = { val: 5, next: six }
const four = { val: 4, next: five }
const three = { val: 3, next: four }
const second = { val: 2, next: three }
const head = { val: 1, next: second }
// 输入一个链表,按链表值从尾到头的顺序返回一个数组
function linkToArray(head) {
const array = []
while (head) {
array.unshift(head.val) // unshift向数组前端插入数值
head = head.next
}
return array
}
console.log(linkToArray(head)) // [7, 6, 5, 4, 3, 2, 1]
// 输入一个链表,反转链表后,输出新链表的表头。
function reserveLink(head) {
let previous = null // 记录当前节点的上个节点
while (head) {
const next = head.next // 记录当前节点的下个节点,遍历使用
head.next = previous // 更换当前节点next指针的指向,反转链表
previous = head // 记录当前节点的上个节点
head = next // 继续反转
}
return previous
}
console.log(reserveLink(head).next.next.next.next.next.next) // 输出 {val: 1, next: null}