Python实现双向链表:从基础到应用

一、引言

        双向链表是一种比单向链表更复杂的数据结构,每个节点除了包含数据和指向下一个节点的指针外,还包含一个指向前一个节点的指针。这种结构使得我们可以从链表的任何节点开始,向前或向后遍历链表。

目录

一、引言

二、节点定义

三、链表实现

四、链表操作

五、应用示例

下面是一个使用双向链表类的示例:

输出结果为: 

总结



二、节点定义

  • 首先,我们需要定义一个双向链表的节点类(Node),它包含数据成员、指向前一个节点的指针和指向下一个节点的指针。


class Node:  def __init__(self, data=None):  self.data = data  self.prev = None  self.next = None

三、链表实现

  • 接下来,我们定义一个双向链表类(DoublyLinkedList),它包含头节点、尾节点和一系列操作链表的方法。
class DoublyLinkedList:  def __init__(self):  self.head = None  self.tail = None  def append(self, value):  new_node = Node(value)  if not self.head:  self.head = new_node  self.tail = new_node  else:  new_node.prev = self.tail  self.tail.next = new_node  self.tail = new_node  def prepend(self, value):  new_node = Node(value)  if not self.head:  self.head = new_node  self.tail = new_node  else:  new_node.next = self.head  self.head.prev = new_node  self.head = new_node  def delete(self, value):  current = self.head  while current:  if current.data == value:  if current == self.head and current == self.tail:  self.head = None  self.tail = None  elif current == self.head:  self.head = current.next  self.head.prev = None  elif current == self.tail:  self.tail = current.prev  self.tail.next = None  else:  current.prev.next = current.next  current.next.prev = current.prev  return True  current = current.next  return False  def print_list(self):  current = self.head  while current:  print(current.data, end=" ")  current = current.next  print()

四、链表操作

  • 在双向链表类中,我们实现了几个基本操作:append(在尾部添加新节点)、prepend(在头部添加新节点)、delete(删除指定值的节点)和print_list(打印链表中的所有元素)。

五、应用示例

  • 下面是一个使用双向链表类的示例:
doubly_linked_list = DoublyLinkedList()  
doubly_linked_list.append(3)  
doubly_linked_list.append(2)  
doubly_linked_list.prepend(1)  
doubly_linked_list.prepend(0)  print("链表中的元素为:", end=" ")  
doubly_linked_list.print_list()  doubly_linked_list.delete(2)  print("删除元素2后的链表为:", end=" ")  
doubly_linked_list.print_list()

  • 输出结果为: 
链表中的元素为: 0 1 3 2   
删除元素2后的链表为: 0 1 3

总结

        双向链表是一种功能强大的数据结构,它允许我们在两个方向上遍历链表,提供了更多的操作灵活性。在实际应用中,双向链表常用于实现双向队列、双向栈等数据结构,以及需要高效插入、删除和遍历操作的场景。

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

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

相关文章

CDN原理探究

来源于百度: https://baike.baidu.com/item/%E5%86%85%E5%AE%B9%E5%88%86%E5%8F%91%E7%BD%91%E7%BB%9C/4034265?frge_ala 通过上图,我们可以了解到,使用了CDN缓存后的网站的访问过程变为: 用户向浏览器提供要访问的域名&#xff…

模型练习史

文章目录 肌肉光头vikingtorso死侍蓝毒液卡通girlwalletdog headman anatomy总结 肌肉光头 viking torso 死侍 蓝毒液 卡通girl wallet dog head man anatomy 总结 zbrush 与 blender 结合使用, 善 !

【QT+QGIS跨平台编译】之五十五:【QGIS_CORE跨平台编译】—【qgsmeshcalcparser.cpp生成】

文章目录 一、Bison二、生成来源三、构建过程一、Bison GNU Bison 是一个通用的解析器生成器,它可以将注释的无上下文语法转换为使用 LALR (1) 解析表的确定性 LR 或广义 LR (GLR) 解析器。Bison 还可以生成 IELR (1) 或规范 LR (1) 解析表。一旦您熟练使用 Bison,您可以使用…

多线程万字详解

进程和线程是计算机程序执行的两个重要概念。 1.进程: 进程是操作系统分配资源的基本单位,每个进程都有自己独立的地址空间,每启动一个进程,系统就会为它分配内存。进程间通信比较复杂,需要用到IPC(InterP…

动态规划--(算法竞赛、蓝桥杯)--二维费用背包

1、B站视频链接&#xff1a;E15 背包DP 二维费用背包_哔哩哔哩_bilibili #include <bits/stdc.h> using namespace std; int f[101][101]; //f[j][k]第i件物品&#xff0c;体积<j,重量<k的最大价值int main(){int n,V,W;//物品、容量、承重int v,w,val;//体积、重…

信息收集2.0版本

内网渗透之信息收集 whois查询 1.1.1.1. 在线网站查询 输入相关的域名即可进行查询。 &#xff08;1&#xff09;站长之家&#xff1a;whois域名查询&#xff1a;http://whois.chinaz.com/ &#xff08;2&#xff09;爱站工具网&#xff1a;whois域名查询&#xff1a;站长…

ventoy制作启动U盘

Ventoy新一代多系统启动U盘解决方案。国产开源U盘启动制作工具&#xff0c;支持Legacy BIOS和UEFI模式&#xff0c;理论上几乎支持任何ISO镜像文件&#xff0c;支持加载多个不同类型的ISO文件启动&#xff0c;无需反复地格式化U盘。把ISO系统文件拷贝到U盘&#xff0c;U盘插入电…

Container killed on request. Exit code is 143

Bug信息 WARN YarnAllocator: Container marked as failed: container_e33_1480922439133_0845_02_000002 on host: hdp4. Exit status: 143. Diagnostics: Container killed on request. Exit code is 143 Container exited with a non-zero exit code 143 Killed by externa…

docker mysql主从复制

新建主服务器容器实例3301 mysql 主 3301 docker run -p 3301:3306 --name mysql-master \ -v /mydata/mysql-master/log:/var/log/mysql \ -v /mydata/mysql-master/data:/var/lib/mysql \ -v /mydata/mysql-master/conf:/etc/mysql \ -v /home/mysql/mysql-files:/var/lib/…

2024 年 20 个最佳移动应用测试工具

技术在不断发展&#xff0c;用户的期望也在不断发展。在这种情况下&#xff0c;组织面临的挑战是提供完美、直观且可靠的体验。这使得移动应用程序测试成为满足这些需求的开发过程的重要组成部分。测试可确保应用程序能够跨多种设备、操作系统和用户场景无缝运行&#xff0c;从…

Muduo库核心代码及优秀编程细节剖析

一、前言&#xff1a; Muduo库是陈硕个人开发的Tcp网络编程库&#xff0c;支持Reactor模型。这篇博文对Muduo库中的Multi-reactor架构代码进行逻辑梳理&#xff0c;同时认真剖析了作者每一处精妙的代码设计思想。 目前我只重构并剖析了Muduo库中的核心部分&#xff0c;即Mult…

SQL注入漏洞解析--less-6

1.第六关了。 2.这个和第五关有点像&#xff0c;只是换成了双引号&#xff0c;接下来的都一样&#xff0c;看我操作(换个函数试一下extractvalue&#xff0c;他的报错位置在第二个&#xff0c;那我就利用一下) 3.爆库名 ?id1"%20and%20extractvalue(1,concat(0x7e,(sele…