链表实现双端队列

news/2025/10/1 20:14:31/文章来源:https://www.cnblogs.com/tianzhentian/p/19122804
  • 定义链表
class ListNode:  def __init__(self, value):  self.val = value  # 节点存储的值  self.prev = None  # 指向前一个节点的指针  self.next = None  # 指向后一个节点的指针
  • 定义双端队列
class DoublyLinedList:  def __init__(self):  self.head = None  # 链表头节点  self.tail = None  # 链表尾节点  self.size = 0  # 链表长度
  • 判空
def is_empty(self):  """检查链表是否为空"""  return self.size == 0
  • 查看元素个数
def get_size(self):  """获取链表长度"""  return self.size
  • 队列头部插入元素
def add_at_head(self, value):  """在链表头部添加节点"""  # 创建新节点  node = ListNode(value)  # 如果链表为空,新节点既是头节点也是尾节点  if self.size == 0:  self.head = node  self.tail = node  else:  # 链表不为空时,将新节点插入到头部  node.next = self.head  # 新节点的next指向原头节点  self.head.prev = node  # 原头节点的prev指向新节点  self.head = node  # 更新头节点为新节点  self.size += 1  # 链表长度加1  return self.size
  • 队列尾部插入元素
def add_at_tail(self, value):  """在链表尾部添加节点"""  # 创建新节点  node = ListNode(value)  # 如果链表为空,新节点既是头节点也是尾节点  if self.size == 0:  self.head = node  self.tail = node  else:  # 链表不为空时,将新节点插入到尾部  node.prev = self.tail  # 新节点的prev指向原尾节点  self.tail.next = node  # 原尾节点的next指向新节点  self.tail = node  # 更新尾节点为新节点  self.size += 1  # 链表长度加1  return self.size
  • 查看队列头元素的值
def peek_at_head(self):  """查看头节点的值(不删除节点)"""  if self.size == 0:  raise Exception("DoublyLinkedList is empty")  return self.head.val
  • 查看队列尾元素的值
def peek_at_tail(self):  """查看尾节点的值(不删除节点)"""  if self.size == 0:  raise Exception("DoublyLinkedList is empty")  return self.tail.val
  • 从队列头部弹出
def pop_at_head(self):  """删除并返回头节点的值"""  if self.size == 0:  raise Exception("DoublyLinkedList is empty")  # 保存头节点的值用于返回  head_value = self.head.val  # 如果链表中只有一个节点  if self.head == self.tail:  self.head = self.tail = None  # 清空链表  else:  # 链表中有多个节点  next_node = self.head.next  # 保存头节点的下一个节点  next_node.prev = None  # 断开原头节点与后续节点的连接  self.head = next_node  # 更新头节点为下一个节点  self.size -= 1  # 链表长度减1  return head_value  # 返回被删除节点的值
  • 从队列尾部弹出
def pop_at_tail(self):  """删除并返回尾节点的值"""  if self.size == 0:  raise Exception("DoublyLinkedList is empty")  # 保存尾节点的值用于返回  tail_value = self.tail.val  # 如果链表中只有一个节点  if self.head == self.tail:  self.head = self.tail = None  # 清空链表  else:  # 链表中有多个节点  prev_node = self.tail.prev  # 保存尾节点的前一个节点  prev_node.next = None  # 断开原尾节点与前驱节点的连接  self.tail = prev_node  # 更新尾节点为前一个节点  self.size -= 1  # 链表长度减1  return tail_value  # 返回被删除节点的值å

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

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

相关文章

专门做朋友圈小视频的网站网站怎么做404

PHP是一种服务器端、跨平台、html嵌入式的脚本语言执行速度快:PHP是一种强大的CGI脚本语言,语法混合了C、Java、Perl和PHP式的新语法,执行网页比CGI、Perl和ASP更快,这是它的第一个突出的特点。 (推荐学习:PHP视频教程…

怎么做58同城网站西安英文旅游网站建设

本文实例讲述了Java模拟计算机的整数乘积计算功能。分享给大家供大家参考,具体如下:计算机计算整数乘积的原理:实现代码:package math;public class two {/*** Fundamental method* f(n) O(n^2)* param a* param b* return*/publ…

网站建设开发制作免费游戏网站制作

哈喽小伙伴们大家好,本系列是一个专门针对前端开发岗的面试题系列,每周将会不定期分享一些面试题,希望对大家有所帮助. 面试官:token 一般在客户端存在哪儿 求职者:Token一般在客户端存在以下几个地方: (1)Cookie:Token可以存储在客户端的Cookie中。服…

深入解析:数字和字节:Linux 中的内存如何工作?

深入解析:数字和字节:Linux 中的内存如何工作?pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas",…

FFmpeg和ZLMediaKit 实现本地视频推流

目录1 本地视频推流1.1 简介1.1.1 FFmpeg1.1.2 ZLMediaKit1.2 环境准备1.2.1 ZLMediaKit 安装配置1.2.2 FFmpeg 安装(可选)1.3 整合1.3.1 pom和配置1.3.2 推流配置类1.3.3 推流服务类1.3.4 前端部分 1 本地视频推流 …

SQL 多表查询速查:JOIN、子查询一文全掌握 - 详解

SQL 多表查询速查:JOIN、子查询一文全掌握 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

MySQL复合查询(重点) - 详解

MySQL复合查询(重点) - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

网站备案期间可以建站荣欣建设集团有限公司网站

目录 1.应用场景2.类似的数据同步工具3.DataX 与 Canal 有什么区别 DataX是阿里巴巴开源的一款数据同步工具,使用Java语言开发的。它提供了从各类数据源读取数据以及向各类数据源写入数据的功能,支持包括MySQL、Oracle、SQLServer、PostgreSQL、HDFS、HB…

14.单臂路由(2025年9月29日) - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

AtCoder Beginner Contest 424 425 部分题解

ABC424E注意到,若两根木棍长度相同,那么它们被操作的顺序也是相邻的。于是,若两根木棍“来源”相同,那么它们始终在同一“批次”中被操作。例如:\([1] \to [1/2, 1/2] \to [1/4, 1/4, 1/2] \to [1/4, 1/4, 1/4, 1…

网站怎么识别PC 手机装修设计灵感网站

文章目录 串的模式匹配 考纲内容 复习提示 1.简单的模式匹配算法 知识回顾 2.串的模式匹配算法——KMP算法 2.1字符串的前缀、后缀和部分匹配值 2.2KMP算法的原理是什么 3.KMP算法的进一步优化 串的模式匹配 考纲内容 字符串模式匹配 复习提示 本章是统考大纲第6章内…

【C++】Visual Studio+CMake 开发 C++ 入门指南:从环境搭建到项目实战 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

学习:uniapp全栈微信小程序vue3后台-额外/精彩报错篇 - 教程

学习:uniapp全栈微信小程序vue3后台-额外/精彩报错篇 - 教程2025-10-01 20:04 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !import…

织梦配置手机网站手机企业网站怎么做

0x01 初识NTLM协议 基本概念:NTLM(NT LAN Manager)认证是一种早期的Windows网络身份认证协议。它在Windows系统中用于验证用户的身份,并提供对网络资源的访问控制,它是一种基于Challenge/Response的认证机制。 认证流程 NTLM协议Challenge…

关于滚动数组

i & 1 还是太丑陋了,可以设一个 ind,每次 i++ 时 ind = 1 - ind。 i + 1 就是 1 - ind。

第九篇

今天是10月1日,ok也是终于等到了国庆节放假,不容易啊,坐了十几个小时的火车终于是顺利到家了。

2025 年宁波搬家公司推荐 TOP 权威榜单发布,多维度解读宁波搬家服务公司创新亮点举措

引言 在宁波这座不断发展的城市,搬家服务需求日益增长,但行业内却存在不少亟待解决的问题。部分小型搬家团队缺乏规范管理,服务质量参差不齐,常常出现物品损坏后推诿责任、坐地起价等现象,让消费者蒙受损失。有的…

2025 年检测器厂家推荐 TOP 品牌权威排名,防爆火焰 / 一体化火焰 / 紫外线火焰 / 离子火焰 / 红外线火焰 / 红紫外复合火焰 / 智能火焰检测器公司推荐

引言 在工业生产、能源供应、环境保护等众多领域,检测器作为关键的监测设备,其性能与质量直接关系到生产安全、效率及数据准确性。当前,检测器市场品牌众多,产品种类繁杂,技术水平参差不齐。部分厂家为追求短期利…

【Git】Git 操作指令大全及运用场景详解

【Git】Git 操作指令大全及运用场景详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mo…

网站建设的目的和作用网店推广软文范例

摘要:本文整理自字节跳动基础架构工程师李国君,在 Streaming Lakehouse Meetup 的分享。幸福里业务是一种典型的交易、事务类型的业务场景,这种业务场景在实时数仓建模中遇到了诸多挑战。本次分享主要介绍幸福里业务基于 Flink & Paimon …