用Python实现的双向链表类,包含了头插、尾插、归并排序等功能


 下面是一个用Python实现的双向链表类,包含了头插、尾插、归并排序等功能。这个类还包含了基本的链表操作,如插入、删除、遍历等。

  
下面是一个用Python实现的双向链表类,包含了头插、尾插、归并排序等功能。这个类还包含了基本的链表操作,如插入、删除、遍历等。
class Node:def __init__(self, data):self.data = dataself.prev = Noneself.next = Noneclass DoublyLinkedList:def __init__(self):self.head = Noneself.tail = Nonedef is_empty(self):return self.head is Nonedef insert_at_head(self, data):new_node = Node(data)if self.is_empty():self.head = self.tail = new_nodeelse:new_node.next = self.headself.head.prev = new_nodeself.head = new_nodedef insert_at_tail(self, data):new_node = Node(data)if self.is_empty():self.head = self.tail = new_nodeelse:new_node.prev = self.tailself.tail.next = new_nodeself.tail = new_nodedef delete_at_head(self):if self.is_empty():return Nonedata = self.head.dataif self.head == self.tail:self.head = self.tail = Noneelse:self.head = self.head.nextself.head.prev = Nonereturn datadef delete_at_tail(self):if self.is_empty():return Nonedata = self.tail.dataif self.head == self.tail:self.head = self.tail = Noneelse:self.tail = self.tail.prevself.tail.next = Nonereturn datadef print_list(self):current = self.headwhile current:print(current.data, end=" <-> ")current = current.nextprint("None")def get_middle(self, head):if head is None:return headslow = headfast = headwhile fast.next and fast.next.next:slow = slow.nextfast = fast.next.nextreturn slowdef merge(self, left, right):if left is None:return rightif right is None:return leftif left.data <= right.data:result = leftresult.next = self.merge(left.next, right)result.next.prev = resultelse:result = rightresult.next = self.merge(left, right.next)result.next.prev = resultreturn resultdef merge_sort(self, head):if head is None or head.next is None:return headmiddle = self.get_middle(head)next_to_middle = middle.nextmiddle.next = Nonenext_to_middle.prev = Noneleft = self.merge_sort(head)right = self.merge_sort(next_to_middle)sorted_list = self.merge(left, right)return sorted_listdef sort(self):self.head = self.merge_sort(self.head)# Update the tail after sortingcurrent = self.headwhile current and current.next:current = current.nextself.tail = current# Example usage:
dll = DoublyLinkedList()
dll.insert_at_tail(3)
dll.insert_at_tail(1)
dll.insert_at_tail(4)
dll.insert_at_tail(2)print("Original list:")
dll.print_list()dll.sort()
print("Sorted list:")
dll.print_list()dll.insert_at_head(5)
print("After inserting 5 at head:")
dll.print_list()dll.insert_at_tail(0)
print("After inserting 0 at tail:")
dll.print_list()

代码说明:
Node类:表示双向链表中的一个节点,包含数据、前驱指针和后继指针。
DoublyLinkedList类:表示双向链表,包含头节点和尾节点。
insert_at_head(data):在链表头部插入一个节点。
insert_at_tail(data):在链表尾部插入一个节点。
delete_at_head():删除链表头部的节点。
delete_at_tail():删除链表尾部的节点。
print_list():打印链表中的所有节点。
get_middle(head):找到链表的中间节点,用于归并排序。
merge(left, right):合并两个有序链表。
merge_sort(head):递归地对链表进行归并排序。
sort():对链表进行排序,并更新尾节点。
示例:
创建一个双向链表并插入一些数据。
对链表进行排序。
在链表头部和尾部插入新节点,并打印链表。
你可以根据需要扩展或修改这个类。


Original list:
3 <-> 1 <-> 4 <-> 2 <-> None
Sorted list:
1 <-> 2 <-> 3 <-> 4 <-> None
After inserting 5 at head:
5 <-> 1 <-> 2 <-> 3 <-> 4 <-> None
After inserting 0 at tail:
5 <-> 1 <-> 2 <-> 3 <-> 4 <-> 0 <-> None

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

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

相关文章

将Google文档导入WordPress:简单实用的几种方法

Google文档是内容创作者非常实用的写作工具。它支持在线编辑、多人协作&#xff0c;并能够自动保存内容。但当我们想把Google文档中的内容导入WordPress网站时&#xff0c;可能会遇到一些小麻烦&#xff0c;比如格式错乱、图片丢失等问题。本文将为大家介绍几种简单实用的方法&…

java面试场景问题

还在补充&#xff0c;这几天工作忙&#xff0c;闲了会把答案附上去&#xff0c;也欢迎各位大佬评论区讨论 1.不用分布式锁如何防重复提交 方法 1&#xff1a;基于唯一请求 ID&#xff08;幂等 Token&#xff09; 思路&#xff1a;前端生成 一个唯一的 requestId&#xff08;…

【笔记ing】C语言补充、组成原理数据表示与汇编实战、操作系统文件实战(高级阶段)

【第19节 C语言语法进阶】 【19.1 条件运算符与逗号运算符】 1 条件运算符 条件运算符是C语言中唯一的一种三亩运算符。三目运算符代表有三个操作数&#xff1b;双目运算符代表有两个操作数&#xff0c;如逻辑运算符就是双目运算符&#xff1b;弹幕运算符代表有一个操作数&a…

GAMES101-现代计算机图形学入门笔记

主讲老师&#xff1a;闫令琪&#xff0c;此处仅做个人笔记使用。如果我的分享对你有帮助&#xff0c;请记得点赞关注不迷路。 课程链接如下&#xff1a;GAMES101-现代计算机图形学入门-闫令琪_哔哩哔哩_bilibili 课程分为四部分&#xff1a;光栅化、几何、光线追踪、模拟 图形…

激光工控机在自动化生产线中有什么关键作用?

激光工控机作为自动化生产线的核心设备&#xff0c;通过高精度控制、快速响应和智能化集成&#xff0c;在提升效率、保障质量、实现柔性制造等方面发挥着不可替代的作用。以下是其关键作用的具体分析&#xff1a; 一、实现高效连续生产&#xff1a; 1.高速加工能力&#xff1…

高等数学(上)题型笔记(六)定积分的应用

目录 1 三角函数定积分的结论 2 定积分的微元法&#xff08;元素法&#xff09; 2.1 使用条件 2.2 使用步骤 3 定积分的几何应用 3.1 平面图形的面积 3.1.1 直角坐标系的情形 3.1.1.1 X型 3.1.1.2 Y型 3.1.1.3 双型 3.1.1.4 复合&#xff1a;分割型 3.1.1.5 引入参…

QT项目——天气预报

文章目录 前言一、项目介绍二、项目基础知识1. 软件开发网络通信架构1.1 CS架构 / BS架构1.1.1 CS架构&#xff08;客户端-服务器架构&#xff09;1.1.2 BS架构&#xff08;浏览器-服务器架构&#xff09; 1.2 HTTP 基本概念 2. QT 下 HTTP 编程2.1 类的解析2.2 示例程序 3. JS…

最优化方法-牛顿法

牛顿法 泰勒级数 泰勒级数展开 $$ \begin{aligned} f(x)&\lim\limits_{n\rightarrow \infin}\sum\limits_{i1}n\frac{1}{n!}f{(n)}(x_0)(x-x_0)^n\ &f(x_0)f’(x_0)(x-x_0)\frac{f’(x_0)}{2!}(x-x_0)2\cdots\frac{1}{n!}fn(x_0)(x-x_0)^n\ &\quad~ O\left[(x-x_…

论文笔记(七十二)Reward Centering(二)

Reward Centering&#xff08;二&#xff09; 文章概括摘要2 简单的奖励中心 文章概括 引用&#xff1a; article{naik2024reward,title{Reward Centering},author{Naik, Abhishek and Wan, Yi and Tomar, Manan and Sutton, Richard S},journal{arXiv preprint arXiv:2405.0…

halcon机器视觉深度学习对象检测,物体检测

目录 效果图操作步骤软件版本halcon参考代码本地函数 get_distinct_colors()本地函数 make_neighboring_colors_distinguishable() 效果图 操作步骤 首先要在Deep Learning Tool工具里面把图片打上标注文本&#xff0c; 然后训练模型&#xff0c;导出模型文件 这个是模型 mod…

MySQL修改JSON格式数据示例

最近发现有个数据是用JSON格式直接存到表格里面的&#xff0c;大概就是下面这样的 然后需要修改里面某个属性的值&#xff0c;一开始我想的是 REPLACE 替换 UPDATE test_1 SET content REPLACE(content, {"age": 15, "name": "w5"}, {"ag…

第4章 信息系统架构(二)

4.2 系统架构 信息系统架构是一种体系结构&#xff0c;它反映了一个组织信息系统的各个组成部分之间的关系&#xff0c;以及信息系统与相关业务、信息系统与相关技术之间的关系。 4.2.1 架构定义 对于大规模的复杂系统来说&#xff0c;对总体的系统结构设计比起对计算算法和…

AI 时代:探索大语言模型与核心技术

引言 在当今科技快速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;正成为推动创新和变革的重要力量。从能够理解和生成自然语言的大语言模型&#xff08;LLM&#xff09;&#xff0c;到具有自我学习能力的生成式预训练转换器&#xff08;GPT&#xff09;&#xf…

Python----数据结构(单链表:节点,是否为空,长度,遍历,添加,删除,查找)

一、链表 链表是一种线性数据结构&#xff0c;由一系列按特定顺序排列的节点组成&#xff0c;这些节点通过指针相互连接。每个节点包含两部分&#xff1a;元素和指向下一个节点的指针。其中&#xff0c;最简单的形式是单向链表&#xff0c;每个节点含有一个信息域和一个指针域&…

10、k8s对外服务之ingress

service和ingress的作用 service的作用 NodePort&#xff1a;会在每个节点开放一个端口&#xff0c;端口号30000-32767。 也是只能用于内网访问&#xff0c;四层转发。实现负载均衡。不能基于域名进行访问。 clusterip&#xff1a;service的默认类型&#xff0c;只能在集群…

Linux-ubuntu系统移植之Uboot启动流程

Linux-ubuntu系统移植之Uboot启动流程 一&#xff0c;Uboot启动流程1.Uboot的两阶段1.1.第一阶段1.11.硬件初始化1.12.复制 U-Boot 到 RAM1.13.跳转到第二阶段 1.2.第二阶段1.21.C 语言环境初始化1.22. 硬件设备初始化1.23. 加载环境变量1.24. 显示启动信息1.25. 等待用户输入&…

H3C交换机路由器防火墙FTP/TFTP服务器搭建。

软件介绍。 3CDaemon 2.0 - Download 3CDaemon 是一款集成了多种网络服务功能的工具软件&#xff0c;主要用于网络管理和文件传输&#xff0c;支持TFTP、FTP、Syslog等多种协议&#xff0c;广泛应用于网络设备的配置和管理。 1. 主要功能 TFTP服务器&#xff1a;支持TFTP协议…

Docker Mysql 数据迁移

查看启动命令目录映射 查看容器名称 docker ps查看容器的启动命令 docker inspect mysql8.0 |grep CreateCommand -A 20如下图所示:我这边是把/var/lib/mysql 目录映射到我宿主机的/mnt/mysql/data目录下,而且我的数量比较大使用方法1的话时间比较久,所以我采用方法2 如果没…

[Windows] WPS 2024冬季更新版(版本号19770)

[Windows] WPS 2024冬季更新版 链接&#xff1a;https://pan.xunlei.com/s/VOJQrS4UCz5639Oan7pu1X84A1?pwdg8ad# WPS灵犀正式上线DeepSeek R1&#xff01;告别服务器超时&#xff0c;办公效率飙升300%&#xff01; 2025年2月14日&#xff0c;WPS官方宣布全面接入DeepSeek …

图解循环神经网络(RNN)

目录 1.循环神经网络介绍 2.网络结构 3.结构分类 4.模型工作原理 5.模型工作示例 6.总结 1.循环神经网络介绍 RNN&#xff08;Recurrent Neural Network&#xff0c;循环神经网络&#xff09;是一种专门用于处理序列数据的神经网络结构。与传统的神经网络不同&#xff0c…