数据结构--简单但常见的链表面试题

124 阅读1分钟

前言

记录一下自己链表的学习心得!话不多说,直接上题!

题目

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}