使用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文件 ​编辑 表数据 文件 表结构 文件 建库文件…

winserver 2019 根据表格自动导入dhcp 作用域

一、必要条件 1.winserver 2019 2.通外网,需要下载模版 3.一个名称叫dhcp_ip_list.xlsx的文件 1.附件为例子,修改其中的数据即可 4.默认租期为8小时 二、代码 Install-Module -Name ImportExcel# Read the xlsx file $data Import-Excel -Path "…

力扣labuladong——一刷day71

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、力扣109. 有序链表转换二叉搜索树二、力扣1382. 将二叉搜索树变平衡 前言 二叉树的递归分为「遍历」和「分解问题」两种思维模式,这道题需要用到…

【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 为基础构建的分布式操作系统,由一组云原生组件构成,专注于提高系统的可扩展性、功…

PM入职一周

目前入职的岗位属于软件的项目经理,只对软件负责,不是传统意义上的项目经理,但是对接的东西一点也不少。 现阶段,主要的流程如下 (1)开发计划,此项开发计划又包括 功能整张表,其实…

vue3 uniapp定时器 每天定时触发任务

最近在uniapp中遇到了一个定时器的功能,需要每天定时00:00:00触发接口请求,用到了timeOutTimer和intervalTimer,结合实例来讲一下实现步骤: 首先了解一下这两个方法的含义 setTimeout:用于在一段时间后执行一次函数。…

怪兽吃糖果

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

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

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

2023第二届全国大学生数据分析大赛A完整原创论文(含摘要+问题分析+模型建立与求解+python代码)

大家好,从昨天肝到现在,终于完成了2023第二届全国大学生数据分析大赛A题某电商平台用户行为分析与挖掘的完整论文啦。 给大家看一下目录吧: 目录 摘 要: 10 一、问题重述 12 二.问题分析 13 2.1问题一 13 2.2问…

Redis持久化AOF详解

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

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

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

工具:Jupyter

Jupyter是一个开源的交互式计算环境,由Fernando Perez和Brian Granger于2014年创立。它提供了一种方便的方式来展示、共享和探索数据,并且可以与多种编程语言和数据格式进行交互。Jupyter的历史可以追溯到2001年,当时Fernando Perez正在使用P…

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

外汇投资是一个充满机会和挑战的市场,对于新手来说,了解一些必要的知识和技巧是非常重要的。 以下是一些新手投资外汇必须注意以下几点: 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的生成产生不利影响…