当前位置:首页 > JavaScript

js 实现单链表实现栈

2026-03-15 13:09:37JavaScript

js 实现单链表实现栈

单链表实现栈的基本思路

使用单链表实现栈时,通常选择链表的头部作为栈顶。因为单链表的头部插入和删除操作的时间复杂度均为 O(1),符合栈的高效操作需求。栈的 push 对应链表头部插入节点,pop 对应链表头部删除节点。

js 实现单链表实现栈

代码实现

class ListNode {
  constructor(val, next = null) {
    this.val = val;
    this.next = next;
  }
}

class LinkedListStack {
  constructor() {
    this.head = null; // 栈顶指针
    this.size = 0;    // 栈大小
  }

  // 入栈操作
  push(val) {
    const newNode = new ListNode(val);
    newNode.next = this.head;
    this.head = newNode;
    this.size++;
  }

  // 出栈操作
  pop() {
    if (this.isEmpty()) {
      throw new Error("栈为空");
    }
    const val = this.head.val;
    this.head = this.head.next;
    this.size--;
    return val;
  }

  // 获取栈顶元素
  peek() {
    if (this.isEmpty()) {
      throw new Error("栈为空");
    }
    return this.head.val;
  }

  // 判断栈是否为空
  isEmpty() {
    return this.size === 0;
  }

  // 获取栈的大小
  getSize() {
    return this.size;
  }
}

使用示例

const stack = new LinkedListStack();
stack.push(1);
stack.push(2);
console.log(stack.peek()); // 输出 2
console.log(stack.pop());  // 输出 2
console.log(stack.getSize()); // 输出 1

关键点说明

  • 时间复杂度pushpoppeek 操作均为 O(1),因为只涉及链表头部的操作。
  • 空间复杂度:每个节点需要额外存储 next 指针,空间复杂度为 O(n)。
  • 边界处理:在 poppeek 时需检查栈是否为空,避免操作无效节点。

扩展优化

若需支持动态扩容或其他功能(如最小栈),可在单链表基础上扩展。例如,实现一个能获取栈中最小值的栈:

class MinStack {
  constructor() {
    this.stack = new LinkedListStack();
    this.minStack = new LinkedListStack(); // 辅助栈存储最小值
  }

  push(val) {
    this.stack.push(val);
    if (this.minStack.isEmpty() || val <= this.minStack.peek()) {
      this.minStack.push(val);
    }
  }

  pop() {
    const val = this.stack.pop();
    if (val === this.minStack.peek()) {
      this.minStack.pop();
    }
    return val;
  }

  getMin() {
    return this.minStack.peek();
  }
}

标签: 链表js
分享给朋友:

相关文章

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…