链表模拟栈

news2024/11/16 0:43:10

定义节点 

class Node {
  var num: Int = _
  var next: Node = _

  def this(num: Int) {
    this
    this.num = num
  }

  override def toString: String = s"num=[${this.num}]"
}

定义方法



class LinkStack {
  private var head = new Node(0)

  def getHead: Node = head

  //判断是否为空
  def isEmpty: Boolean = {
    head.next == null
  }

  //无需判断是否为满

  //查看当前链表
  def list(): Unit = {
    if (isEmpty) {
      println(s"栈已空")
      return
    }
    var temp = head.next
    while (temp.next != null) {
      println(s"${temp}")
      temp = temp.next
      Thread.sleep(500)
    }
  }

  //入栈
  def push(value: Int): Unit = {
    if (isEmpty) head.next = new Node(1)
    //使用头插法
    val newNode = new Node(value)
    newNode.next = head.next
    head.next = newNode
  }

  //出栈
  def pop(): Int = {
    if (isEmpty) throw new RuntimeException("栈空")
    val temp = head.next
    if (temp.next != null) {
      println(s"弹栈=>${temp.num}")
      head = temp.next
    } else {
      println(s"弹栈=>${temp.num}")
    }
    temp.num
  }
}

主函数

package Algotithm

object LinkedListStackDemo {
  def main(args: Array[String]): Unit = {
    val stack = new LinkStack
    stack.push(1)
    stack.push(3)
    println(s"原链表=====")
    stack.list()
    println(s"弹栈一次=====")
    stack.pop()
    stack.list()
    println(s"弹栈二次=====")
    stack.pop()
    stack.list()
    
  }

}

结果 

总结

1、入栈时使用头插法,将新节点插入在 head头节点后面

2、 pop出栈 时需要对当前链表进行非空判定。如果取出后节点为空,则不需要对 head.next 进行赋值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/958214.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

每日一题 1110删点成林

题目 给出二叉树的根节点 root,树上每个节点都有一个不同的值。 如果节点值在 to_delete 中出现,我们就把该节点从树上删去,最后得到一个森林(一些不相交的树构成的集合)。 返回森林中的每棵树。你可以按任意顺序组…

Pandas+Pyecharts | 2023软科中国大学排名分析可视化

文章目录 🏳️‍🌈 1. 导入模块🏳️‍🌈 2. Pandas数据处理2.1 读取数据2.2 数据信息 🏳️‍🌈 3. Pyecharts数据可视化3.1 2023中国大学综合排名TOP303.2 2023中国大学各类型占比3.3 2023中国各省地区大学…

Redis 复制(replica)

1. 是什么 1.1 官网地址 https://redis.io/docs/management/replication/ 1.2 一句话 1. 就是主从复制,master以写为主,slave以读为主 2. 当master数据变化的时候,自动将新的数据异步同步到其它slave数据库 2. 能干嘛 1. 读写分离 2. 容灾…

准备HarmonyOS开发环境

引言 在开始 HarmonyOS 开发之前,需要准备好开发环境。本章将详细指导你如何安装 HarmonyOS SDK、配置开发环境、创建 HarmonyOS 项目。 目录 安装 HarmonyOS SDK 配置开发环境 创建 HarmonyOS 项目 总结 1. 安装 HarmonyOS SDK HarmonyOS SDK 是开发 Harmo…

共享办公空间的SWOT分析:

S(优势): 灵活性和多样性:共享办公空间通常提供多种套餐和服务,适合不同需求和预算的初创企业和个人。 资源共享和合作:共享办公空间提供了与其他企业家、创新者和专业人士交流和合作的机会,可…

为 LVGL 添加截图/截屏功能(lv_100ask_screenshot)

本文内容选自百问网,完整的演示视频观看: https://www.bilibili.com/video/BV18r4y1X7MJ 前言 lv_100ask_screenshot 是一个基于 lvgl 的屏幕截图工具。 lv_100ask_screenshot 特性: 可以将LVGL的屏幕对象(全屏)保存为图片文件&#xff1…

Deepnote:为什么我停止使用 Jupyter Notebook

Jupyter 笔记本已经成为必不可少多年来用于众多数据科学工作流程的工具。其中包括执行数据挖掘、分析、处理、建模以及在每个数据科学项目的生命周期中执行的一般日常实验任务。 Jupyter(作者提供的图片) 尽管它很受欢迎,但许多数据科学家也指出了它的众多缺点,例如这里和

ThingsKit物联网平台告警中心之告警联系人

告警联系人是指接收告警信息的人,产生告警后,会第一时间通知他。 新增 点击新增告警联系人按钮,填入相关信息,确认新增。 告警联系人参数参数说明联系人姓名 定义告警通知到的联系人名称必填支持输入的格式:中英文…

【LeetCode】84.柱状图中最大的矩形

题目 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例 1: 输入:heights [2,1,5,6,2,3] 输出:10 解释:最大的…

如何理解attention中的Q、K、V?

y直接用torch实现一个SelfAttention来说一说: 1、首先定义三哥线性变换,query,key以及value: class BertSelfAttention(nn.Module):self.query nn.Linear(config.hidden_size, self.all_head_size)#输入768,输出768…

2第一个Java程序

目录 1第一个Java代码 2类class 3运行Java文件 1第一个Java代码 public class Hello {public static void main(String[] args) {System.out.println("Hello, world!");} } 2类class public class Hello {public static void main(String[] args) {System.ou…

书箱扫描仪真神器,免拆书,AI助力自动识别翻页

平板扫描仪见多了,馈纸式扫描仪我们也介绍过了,但它们都不适合扫描书箱,如果您一定要用它们来完成这项任务,那将很费劲,首先,您得将书拆成一页一页的,然后再放进去扫,非常麻烦&#…

Docker从认识到实践再到底层原理(二-2)|Namespace+cgroups

前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…

分库分表篇-2.3 springBoot 集成Mycat(1.6)

文章目录 前言一、springBoot 集成Mycat(1.6) 步骤:二、query_cache_size unknown 处理:总结: 前言 在springboot 项目中我们应该如何集成mycat 然后让其帮助我们进行数据的分库和分表处理呢。 一、springBoot 集成Mycat(1.6) 步骤&#xff…

HTTP与SOCKS5的区别对比

在互联网世界中,服务器是一种重要的工具,可以帮助我们提高网络安全性等。今天,我们将重点关注两种常见的技术:HTTP和SOCKS5。让我们深入了解它们的工作原理、用途和优缺点,并通过Python代码示例学习如何使用它们。 HT…

跨境海淘攻略:如何实现自己批量养买家账号海淘

近年来,随着互联网的发展,网购已经成为人们日常生活中不可或缺的一部分。不仅在国内购买商品,在跨境电商行业越来越成熟,很多的消费者开始选择购买国外平台商品,价格相比国内专柜来说会更为优惠。因此,海淘…

书单制作方法详细步骤分享,想学的小伙伴看过来

如果你是一个热爱阅读的人,那么制作一份书单可能是一件有趣和有用的事情。在这篇文章中,我们将分享一些书单制作的方法和注意事项。 选择主题和书籍 首先,你需要选择一种主题,以便你可以按照主题来选择书籍。选择一个你感兴趣的主…

MES系统车间生产进度监控

随着制造业竞争的加剧和市场需求的不断变化,车间生产进度监控成为制造企业提高生产效率、降低成本以及实现及时决策的重要环节。在这个背景下,制造执行系统(MES)的车间生产进度监控模块应运而生。 一、车间生产进度监控MES系统的定…

TensorFlow 的基本概念和使用场景介绍

文章目录 一、TensorFlow基本概念1. 张量(Tensor)2. 计算图(Computation Graph)3. 会话(Session) 二、TensorFlow使用场景1. 机器学习(Machine Learning)2. 计算机视觉(C…

Fedora Linux Flatpak 八月推荐应用

导读本文介绍了 Flathub 中可用的项目以及安装说明。 Flathub 是获取和分发适用于所有 Linux 的应用的地方。它由 Flatpak 提供支持,允许 Flathub 应用在几乎任何 Linux 发行版上运行。 请阅读 “Flatpak 入门”。要启用 Flathub 作为你的 Flatpak 提供商&#xff…