当前位置:首页 > JavaScript

js 实现单链表实现栈

2026-02-02 13:04:01JavaScript

js 实现单链表实现栈

js 实现单链表实现栈

单链表实现栈的原理

栈是一种后进先出(LIFO)的数据结构,单链表实现栈的关键在于利用链表的头部作为栈顶,这样插入和删除操作的时间复杂度均为 O(1)。

单链表节点定义

class Node {
  constructor(value) {
    this.value = value;
    this.next = null;
  }
}

栈的实现

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

  // 入栈操作
  push(value) {
    const newNode = new Node(value);
    newNode.next = this.top;
    this.top = newNode;
    this.size++;
  }

  // 出栈操作
  pop() {
    if (this.isEmpty()) {
      return null;
    }
    const poppedValue = this.top.value;
    this.top = this.top.next;
    this.size--;
    return poppedValue;
  }

  // 查看栈顶元素
  peek() {
    if (this.isEmpty()) {
      return null;
    }
    return this.top.value;
  }

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

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

  // 清空栈
  clear() {
    this.top = null;
    this.size = 0;
  }

  // 打印栈中的元素
  print() {
    let current = this.top;
    const elements = [];
    while (current) {
      elements.push(current.value);
      current = current.next;
    }
    console.log(elements.join(' -> '));
  }
}

使用示例

const stack = new LinkedListStack();
stack.push(1);
stack.push(2);
stack.push(3);
stack.print(); // 输出: 3 -> 2 -> 1

console.log(stack.pop()); // 输出: 3
stack.print(); // 输出: 2 -> 1

console.log(stack.peek()); // 输出: 2
console.log(stack.getSize()); // 输出: 2
console.log(stack.isEmpty()); // 输出: false

stack.clear();
console.log(stack.isEmpty()); // 输出: true

关键点说明

  • 入栈(push):将新节点插入到链表头部,并更新栈顶指针。
  • 出栈(pop):移除链表头部节点,并返回其值,同时更新栈顶指针。
  • 时间复杂度:所有操作均为 O(1),除了打印栈(print)为 O(n)。
  • 空间复杂度:每个节点需要额外存储一个 next 指针,空间复杂度为 O(n)。

这种方法利用单链表的头部操作高效实现了栈的基本功能。

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

相关文章

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:…

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…

js实现图片放大

js实现图片放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性实现图片放大效果。当鼠标悬停时,图片会平滑放大。 const img = document…

js实现删除

js实现删除

使用 splice 方法删除数组元素 splice 方法可以删除数组中的元素,并返回被删除的元素。它接受两个参数:起始索引和要删除的元素数量。 const array = [1, 2, 3, 4…

js 实现全选

js 实现全选

实现全选功能的方法 使用 JavaScript 实现全选功能通常需要操作复选框(checkbox)的状态。以下是几种常见的实现方式。 通过 DOM 操作实现全选 // 获取全选复选框和子复选框 co…