使用Python实现单链表

目录

一、引言

二、节点的定义

三、链表的创建

四、插入节点

五、删除节点

六、遍历链表

七、节点的查找

八、总结


一、引言

单链表是一种常用的数据结构,它由一系列节点组成,每个节点包含一个数据元素和指向下一个节点的指针。单链表可以用来存储有序的数据,并且可以在链表的任意位置插入、删除节点。在Python中,我们可以使用类来实现单链表。本文将详细介绍如何使用Python实现单链表,包括节点的定义、链表的创建、插入、删除和遍历等操作。

二、节点的定义

在Python中,我们可以使用类来定义单链表的节点。每个节点包含一个数据元素和一个指向下一个节点的指针。下面是一个简单的节点类定义:

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

这个节点类包含两个属性:data和next。data属性用于存储节点的数据元素,next属性用于指向下一个节点。在创建节点时,我们可以为data属性指定一个初始值,默认为None。

三、链表的创建

在Python中,我们可以使用类来创建单链表。下面是一个简单的单链表类定义:

class LinkedList:  def __init__(self):  self.head = None

这个链表类包含一个属性:head。head属性用于指向链表的第一个节点。在创建链表时,我们可以将head属性初始化为None。

四、插入节点

在单链表中插入节点需要遵循一定的顺序,即从链表的头部插入到尾部。下面是一个简单的插入节点方法:

def insert(self, data):  new_node = Node(data)  # 创建新节点  if self.head is None:  # 如果链表为空,则将新节点作为头节点  self.head = new_node  else:  # 否则将新节点插入到链表的尾部  current_node = self.head  # 定义当前节点为头节点  while current_node.next is not None:  # 遍历链表找到最后一个节点  current_node = current_node.next  current_node.next = new_node  # 将新节点插入到最后一个节点的后面

这个插入方法接受一个数据元素作为参数,创建一个新节点,并将其插入到链表的尾部。如果链表为空,则将新节点作为头节点。否则,将新节点插入到链表的尾部。在插入过程中,我们需要遍历链表找到最后一个节点,然后将新节点插入到最后一个节点的后面。

五、删除节点

在单链表中删除节点需要找到要删除的节点并更新其前一个节点的指针。下面是一个简单的删除节点方法:

def delete(self, data):  current_node = self.head  # 定义当前节点为头节点  if current_node is not None and current_node.data == data:  # 如果头节点就是要删除的节点  self.head = current_node.next  # 更新头节点指针  current_node = None  # 释放当前节点的内存空间  else:  # 否则遍历链表找到要删除的节点并更新其前一个节点的指针  while current_node is not None and current_node.data != data:  # 遍历链表找到要删除的节点的前一个节点  prev_node = current_node  # 记录要删除节点的上一个节点  current_node = current_node.next  # 移动到下一个节点  if current_node is not None:  # 如果找到了要删除的节点  prev_node.next = current_node.next  # 更新前一个节点的指针,跳过要删除的节点  current_node = None  # 释放当前节点的内存空间

这个删除方法接受一个数据元素作为参数,找到要删除的节点并更新其前一个节点的指针。如果头节点就是要删除的节点,则将头节点指针更新为下一个节点。否则,遍历链表找到要删除的节点的前一个节点,并更新其指针,跳过要删除的节点。最后释放要删除节点的内存空间。

六、遍历链表

遍历单链表可以按照从头到尾的顺序访问每个节点。下面是一个简单的遍历方法:

def traverse(self):  current_node = self.head  # 定义当前节点为头节点  while current_node is not None:  print(current_node.data)  # 访问当前节点的数据元素并打印  current_node = current_node.next  # 移动到下一个节点

这个遍历方法从头节点开始,依次访问每个节点的数据元素并打印。在访问完一个节点后,将当前节点指向下一个节点,直到链表结束。这样就可以按照从头到尾的顺序访问整个链表。

七、节点的查找

在单链表中查找特定的节点也是常见的操作。下面是一个简单的查找方法:

def find(self, data):  current_node = self.head  # 定义当前节点为头节点  while current_node is not None and current_node.data != data:  # 遍历链表找到要查找的节点  current_node = current_node.next  # 移动到下一个节点  return current_node  # 返回查找到的节点,如果未找到则返回None

这个查找方法接受一个数据元素作为参数,遍历链表找到具有该数据元素的节点。如果找到了该节点,则返回该节点。否则,返回None。

八、总结

通过以上介绍,我们可以看到使用Python实现单链表是相对简单的。通过定义节点类和链表类,我们可以创建单链表、插入节点、删除节点、遍历链表以及查找节点等操作。这些操作都是基于链表的特性进行的,通过指针来连接各个节点。

在实际应用中,单链表可以用于存储各种有序的数据,如排序算法中的辅助数据结构、动态数组等。掌握单链表的基本操作对于深入学习数据结构和算法是非常有帮助的。

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

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

相关文章

Qt 中文处理

windows下 Qt显示中文的几种方式: 1, 环境:Qt 5.15.2 vs2019 64位 win11系统 默认用Qt 创建的文件使用utf-8编码格式,此环境下 中文没有问题 ui->textEdit->append("中文测试"); 2, 某些 低于…

【MySQL备份】MySQL备份工具-MyDumper

目录 什么是MyDumper MyDumper优势有哪些 如何安装MyDumper 参数解释 1 mydumper参数解释 备份流程 一致性快照如何工作? 如何排除(或包含)数据库? 输出文件 Metadata文件 ​编辑 表数据 文件 表结构 文件 建库文件…

【Unity学习笔记】光照简介

本节主要是简单介绍一些常见的光照组件和渲染设置。 文章目录 灯光类型平行光Directional Light点光源Point Light聚光灯Spot Light面积光 Area Light 阴影设置全局光照明光照模式直接光照与间接光照Mixed Lighting 光照探针Light Probe Group光照探针组 反射探针 灯光类型 在…

工具应用:Robot Framework->对协议级接口进行测试

实验简介 本节实验主要为大家讲解如何利用Robot Framework结合常用的关键字完成对Agileone系统中的“需求提案”模块进行协议级接口的自动化测试脚本开发。 实验目的 (1) 掌握RF的Requests库的常用关键字及用法。 (2) 能够熟练…

一文速览字节最新分布式操作系统KubeWharf

一文速览字节最新分布式操作系统KubeWharf KubeWharf 是字节跳动基础架构团队在对 Kubernetes 进行了大规模应用和不断优化增强之后的技术结晶。 这是一套以 Kubernetes 为基础构建的分布式操作系统,由一组云原生组件构成,专注于提高系统的可扩展性、功…

怪兽吃糖果

欢迎来到程序小院 怪兽吃糖果 玩法:左右飞出的糖果,点击鼠标糖果即为怪兽吃掉,不同的糖果不同的分数奖励, 吃不掉的糖果会扣除一次生命,共三次生命值,点击炸弹游戏结束,快去吃糖果吧^^开始游戏…

基于ssm大学生创新创业平台项目管理子系统设计与实现论文

摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对大学生创新创业项目信息管理混乱,出错率高,信…

Redis持久化AOF详解

基础面试题 什么是AOF AOF(Append-Only File)用于将Redis服务器收到的写操作追加到日志文件,通过该机制可以保证服务器重启后依然可以依靠日志文件恢复数据。 它的工作过程大抵分为以下几步: 收到客户端的写入命令(例如SET、DE…

安全算法(一):安全技术、加密的基础知识、哈希函数的简单介绍

安全算法(一):安全技术、加密的基础知识、哈希函数的简单介绍 通过互联网交换数据时,数据要经过各种各样的网络和设备才能传到对方那里。数据在传输过程中有可能会经过某些恶意用户的设备,从而导致内容被盗取。 因此…

外汇天眼:新手做外汇交易需要注意什么?

外汇投资是一个充满机会和挑战的市场,对于新手来说,了解一些必要的知识和技巧是非常重要的。 以下是一些新手投资外汇必须注意以下几点: 1.了解外汇市场的基本知识 在进入外汇市场之前,了解一些基本知识是必要的。 这包括外汇市…

亚马逊鲲鹏系统:防关联技术守护您的账户安全

亚马逊买家账号注册是一项相当简便的操作,但当涉及到批量注册时,我们就需要更加注意防关联的问题。对于那些对此领域不够熟悉的朋友们,可以使用亚马逊鲲鹏系统,这款系统能够为我们提供一站式的解决方案。该系统不仅支持买家账号的…

从零开始学习 Python 网络爬虫:使用 Beautiful Soup 解析网页

在这篇文章中,我们将介绍如何使用 Python 编写一个简单的网络爬虫,以获取并解析网页内容。我们将使用 Beautiful Soup 库,它是一个非常强大的库,用于解析和操作 HTML 和 XML 文档。让我们开始吧! 一. 安装 Beautiful …

mysql,树形结构表中,查询所有末节点数据(叶子结点)

需求:在一个可以存放多级目录的表中,查询出某个课程目录下所有末节点(因为只有末节点可以挂载资源) 例如下图: 其中 1.11.2.12.1 都是末节点,因为他们已经没有下一级了 catalog表中重要字段有:c…

【论文解读】System 2 Attention提高大语言模型客观性和事实性

一、简要介绍 本文简要介绍了论文“System 2 Attention (is something you might need too) ”的相关工作。基于transformer的大语言模型(LLM)中的软注意很容易将上下文中的不相关信息合并到其潜在的表征中,这将对下一token的生成产生不利影响…

【docker四】使用Docker-compose一键部署Wordpress平台

目录 一、YAML 文件格式及编写注意事项(重要) 1、yaml文件使用时注意事项: 2、yaml文件的基本数据结构: 2.1、声明变量(标量。是单个的不可再分的值,类型:字符串,整数&#xff0c…

SpringIOC之DependsOn

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

scikit_feature_selection实战

在进行李宏毅HW01作业时,需进行特征选择。 选用scikit-learn 中的feature_selection. 参考: selectkbest feature selection 实战注意点: chi 2 适用于非零的参数, 如果报错,换用 f_classif model SelectKBest(…

Unity 修改游戏对象的旋转角度Rotation的方法

在Unity中要修改游戏对象中的旋转角度,即下图中的Rotation: 有三个方法: 1、 使用欧拉角(Euler Angles):欧拉角是一组表示旋转的三个角度值(绕X轴的旋转、绕Y轴的旋转和绕Z轴的旋转)。 transf…

2019年第八届数学建模国际赛小美赛A题放射性产生的热量解题全过程文档及程序

2019年第八届数学建模国际赛小美赛 A题 放射性产生的热量 原题再现: 假设我们把一块半衰期很长的放射性物质做成一个特定的形状。在这种材料中,原子核在衰变时会以随机的方向释放质子。我们假设携带质子的能量是一个常数。质子在穿过致密物质时&#x…

重生奇迹MU翅膀合成方法

重生奇迹MU翅膀,攻击力和吸收伤害都相当强大,但是合成难度极高,下面给大家详解怎么合成! 方法/步骤 1、先到商店买加4追4物品,级别越高越好,可以买多个,数量越多,合成几率越高&…