用python实现单链表的基础操作
1 问题
用python实现单链表的基础操作:插入,删除,遍历,判空,清空链表,求长度,获取元素,判断元素是否存在。
2 方法
解决问题的步骤采用如下方式:
使用函数和类的方法来实现单链表的基本操作
插入操作时使用头插法
删除操作时,删除头节点一行代码即可,其他位置的需要判断+遍历
通过实验、实践等证明提出的方法是有效的,是能够解决开头提出的问题。
代码清单 1
| class Node: """链表节点初始化""" def __init__(self, item): self.item = item self._next = None class LinkList: """链表及其相关操作""" def __init__(self): self._head = None def is_empty(self): """判断是否为空链表,头节点为None则是空""" return self._head is None def length(self): """求链表的长度""" p = self._head count = 0 while p: count += 1 p = p._next return count def append(self, item): """向链表尾部添加元素, 考虑是否是空链表""" node = Node(item) p = self._head if not p: self._head = node else: while p._next: p = p._next p._next = node def add(self, item): """向链表头部插入元素""" node = Node(item) node._next = self._head self._head = node def insert(self, position, item): """向链表中插入元素""" # 头插 or 尾插 or 中间插入 if position <= 0: self.add(item) elif position >= self.length(): self.append(item) else: pre = self._head count = 0 while count < position - 1: count += 1 pre = pre._next node = Node(item) node._next = pre._next pre._next = node def get_item(self, position): """获取某位置的元素""" if position < 0 or position >= self.length(): return None p = self._head count = 0 while count != position: p = p._next count += 1 return p.item def exixt_value(self, item): """某个值是否存在""" p = self._head while p: if p.item == item: return True else: p = p._next return False def remove(self, item): """删除元素""" p = self._head pre = None while p: if p.item == item: # 是否头节点 if not pre: self._head = p._next else: pre._next = p._next break else: pre = p p = p._next def clear(self): """删除链表""" self._head = None def travel(self): """列表遍历""" p = self._head while p: print(p.item, end=" ") p = p._next print() if __name__ == '__main__': linklist = LinkList() linklist.append(2) linklist.append(3) linklist.append(4) linklist.append(5) print(linklist.length()) linklist.travel() linklist.add(1) linklist.add(0) linklist.travel() linklist.insert(2, 8) linklist.insert(2, 9) linklist.travel() print(linklist.get_item(2), linklist.get_item(12), linklist.get_item(4)) print(linklist.exixt_value(9), linklist.exixt_value(20)) linklist.remove(9) linklist.remove(5) linklist.travel() linklist.clear() linklist.travel() |
3 结语
针对用python实现单链表的基础操作,通过python运行实验,证明该方法是有效的,这种设置方法代码较多,因此未来还需继续改善这种方法以适应更多场景。
相关文章:
用python实现单链表的基础操作
1 问题 用python实现单链表的基础操作:插入,删除,遍历,判空,清空链表,求长度,获取元素,判断元素是否存在。 2 方法 解决问题的步骤采用如下方式: 使用函数和类的方法来实…...
[头歌系统数据库实验] 实验3 MySQL的DDL语言
目录 第1关:将P表中的所有红色零件的重量增加6 第2关:把P表中全部红色零件的颜色改成蓝色 第3关:将SPJ表中由S5供给J4的零件P6改为由S3供应 第4关:将SPJ表中所有天津供应商的QTY属性值减少11(用子查询方式&#x…...
系统运维安全之病毒自检及防护
一、前言 Linux勒索病毒(Linux ransomware)是一种最令人恶心的计算机恶意病毒,它以侵入Linux系统,捆绑文件并要求支付赎金才能释放文件为主要目的,破坏用户的数据,造成数据讹诈。Linux勒索病毒它们的存在已…...
Mabatis处理异常屏蔽SQL返回前端全局异常捕获处理
文章目录 Mabatis处理异常屏蔽SQL返回前端全局异常捕获处理结论1 java异常体系2 Spring框架异常处理3 定位Spring框架转化为哪种unchecked异常3.1 捕获RuntimeException定位Spring框架转化抛出的异常类3.2 进一步查看包名判断3.3 识别MyBatisSystemException下级实现3.3 识别My…...
黑豹程序员-java发邮件,发送内容支持html,带多附件的案例
介绍 发邮件mail是常见的软件功能,下面利于spring和java的mail库实现发送内容支持html,带多附件的案例 开启SMTP邮件发送协议 谁提供的SMTP邮件服务,就找谁开启。QQ邮箱类似。 依赖 <!--Java MAil 发送邮件API--><dependency&g…...
[LeetCode] 15. 三数之和
15. 三数之和 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 **注意:**答案中不可以包含重复…...
Android Chips(标签)
目录 一、流式布局标签发展历程 二、类型及使用 2.1 Chip.Action(默认值) 2.2 Chip.Entry 2.3 Chip.Filter 2.4 Chip.Choice 三、常用事件 3.1 OnClickListener 3.2 OnCheckedChangeListener 3.3 OnCloseIconClickListener 四、ChipGroup 4.1 ChipGroup Chip.Choi…...
飞行汽车开发原理(上)
前言 小节的安排是由浅入深,要按顺序读;有电路知识基础的同学可跳到“计算机电路”一节开始。因为知识点之间有网状依赖,没办法按分类来讲。 为了避免过于深入、越讲越懵,很多描述仅为方便理解、不求严谨。 半导体特性 导体&a…...
22、pytest多个参数化的组合
官方实例 # content of test_multi_parametrie.py import pytestpytest.mark.parametrize("x",[0,1]) pytest.mark.parametrize("y",[2,3]) def test_foo(x,y):print("{}-{}".format(x,y))pass解读与实操 要获得多个参数化参数的所有组合&…...
【网络奇缘】- 如何自己动手做一个五类|以太网|RJ45|网络电缆
🌈个人主页: Aileen_0v0🔥系列专栏: 一见倾心,再见倾城 --- 计算机网络~💫个人格言:"没有罗马,那就自己创造罗马~" 本篇文章关于计算机网络的动手小实验---如何自己动手做一个网线, 也是为后面的物理层学习进…...
【从零开始学习JVM | 第三篇】类的生命周期(高频面试)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。 在本文中,我们将深入探讨类的生命周期,从类加载到…...
详解前后端交互时PO,DTO,VO模型类的应用场景
前后端交互时的数据传输模型 前后端交互流程 前后端交互的流程: 前端与后端开发人员之间主要依据接口进行开发 前端通过Http协议请求后端服务提供的接口后端服务的控制层Controller接收前端的请求Contorller层调用Service层进行业务处理Service层调用Dao持久层对数据持久化 …...
力扣295. 数据流的中位数
优先队列 思路: 中位数是排序中间的数值:S1.M.S2可以使用两个优先队列来存放两边的数值,总是使得左侧的堆顶是最大的,右侧的堆顶是最小的,即使用大顶堆存放 S1,使用小顶堆存放S2,使得两个队列的…...
英语二笔记
完型填空 20题/0.5分 总分10, 至少拿8分 阅读理解A 20题/2分 总分40 至少拿24分 阅读理解B 5题/2分 总分10 至少拿6分 短文翻译 1题/15分 …...
【OpenSSH升级】升级后证书认证登录突然失效
上一篇“【OpenSSH升级】无论密码输入正确与否总是登录失败(error: Could not get shadow information for root)”总结了CentOS7上的openssh从7.4升级到9.4之后,密码认证失败问题,这里再总结一下证书认证失效问题。 大多数情况下…...
pytest +uiautomator2+weditor app自动化从零开始
目录结构1.0 把设备连接单独移出去了 模块操作代码,有一些流程操作和断言方法 from devices import dv from time import sleep import random from tool.jt import capture_screenshotdef initialization(func):def wrapper():sleep(1)dv.app_stop(com.visteon.…...
【计算机网络笔记】物理层——信道与信道容量
系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…...
深度学习火车票识别系统 计算机竞赛
文章目录 0 前言1 课题意义课题难点: 2 实现方法2.1 图像预处理2.2 字符分割2.3 字符识别部分实现代码 3 实现效果4 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 图像识别 火车票识别系统 该项目较为新颖,适…...
C++EasyX之井字棋
视频链接 井字棋 用EasyX和C实现井字棋小游戏 源码及注释 #include<graphics.h>char board_data[3][3] {{-,-,-},{-,-,-},{-,-,-}, };char current_piece O;//检测指定棋子的玩家是否获胜 bool CheckWin(char c) {// 检查每一行for (int i 0; i < 3; i){if (bo…...
12.5_黑马数据结构与算法Java
目录 001 二分查找 算法描述 002 二分查找 算法实现 003 二分查找 问题1 循环条件 004 二分查找 问题2 中间索引 thinking:反码补码原码? thinking:二进制转十进制? thinking:无符号右移? 005 二分…...
资源捕获高效解决方案:猫抓浏览器扩展让媒体提取更简单
资源捕获高效解决方案:猫抓浏览器扩展让媒体提取更简单 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在当今数字时代,我们每天都在网页上浏览大量的媒体内容,从精…...
Python+MinIO实战:5分钟搞定对象存储文件上传下载(附完整代码)
PythonMinIO实战:5分钟搞定对象存储文件上传下载(附完整代码) 对象存储正在成为现代应用开发中不可或缺的基础设施。无论是个人项目还是企业级应用,高效、可靠的文件存储方案都能显著提升开发效率。MinIO作为一款高性能的对象存储…...
5个高效实用的英雄联盟工具集使用指南
5个高效实用的英雄联盟工具集使用指南 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League-Toolkit是一款基于LCU API开发的开源…...
OpenClaw多模型切换技巧:GLM-4.7-Flash与Qwen3-32B混合调用实战
OpenClaw多模型切换技巧:GLM-4.7-Flash与Qwen3-32B混合调用实战 1. 为什么需要多模型切换 去年冬天,当我第一次尝试用OpenClaw自动处理周报时,发现一个有趣的现象:用同一个模型处理文本摘要和代码片段时,效果差异很大…...
从音频生成到DNA分析:手把手带你用S4和Hyena搞定Transformer不擅长的那些长序列任务
从音频生成到DNA分析:手把手带你用S4和Hyena搞定Transformer不擅长的那些长序列任务 当我们需要处理长达数小时的音频波形、百万碱基对的DNA序列或整本小说级别的文本时,传统Transformer架构很快就会遇到计算瓶颈。本文将带您探索两种突破性的序列建模方…...
scanf_s使用避坑指南:如何正确应对C6064警告(含C6054连带问题处理)
scanf_s安全使用全指南:彻底解决C6064与C6054警告 在Windows平台进行C/C开发时,使用scanf_s函数处理用户输入是常见场景。但许多开发者都会遇到两个令人困惑的警告——C6064和C6054。这些警告看似简单,实则暗藏玄机。本文将带你深入理解这两个…...
HunyuanVideo-Foley效果展示:AI生成ASMR触发音、白噪音与专注背景音
HunyuanVideo-Foley效果展示:AI生成ASMR触发音、白噪音与专注背景音 1. 核心能力概览 HunyuanVideo-Foley是一款专为音效生成优化的AI模型,能够根据文字描述自动生成高质量的音频内容。基于RTX 4090D 24GB显存深度优化,该镜像提供了开箱即用…...
保姆级教程:NLI-DistilRoBERTa快速部署与简单调用指南
保姆级教程:NLI-DistilRoBERTa快速部署与简单调用指南 1. 项目概述与核心能力 NLI-DistilRoBERTa是基于DistilRoBERTa模型的自然语言推理(Natural Language Inference)Web服务,专门用于分析两个句子之间的逻辑关系。这个轻量级模型保留了RoBERTa模型90…...
【英飞凌】TC3XX单片机型号解码:从命名规则看芯片选型
1. 英飞凌TC3XX单片机命名规则解析 第一次接触英飞凌TC3XX系列单片机时,我完全被那一长串型号搞懵了。TC387TP、TC377T、TC397QP...这些看似随机的字母数字组合,其实隐藏着丰富的芯片信息。经过几个项目的实战,我终于摸清了这套命名规则的规律…...
模拟IC工程师必备:用Cadence Virtuoso仿真电流镜的7个关键步骤
模拟IC工程师必备:用Cadence Virtuoso仿真电流镜的7个关键步骤 在模拟集成电路设计中,电流镜堪称"细胞级"的基础模块,其性能直接影响整个系统的精度与稳定性。对于刚接触Cadence Virtuoso的工程师而言,如何高效完成从电…...
