03_单链表的实现
2、链表的功能定义方法说明size()返回链表中元素个数is_empty()判断链表是否为空insert(index, item)在指定位置插入元素append(item)在末尾插入元素remove(index)删除指定位置的元素set(index, item)修改指定位置的元素get(index)获取指定位置的元素find(item)查找链表中某个元素的位置__str__()返回字符串 [元素1, 元素2, 元素3]__iter__()返回迭代器对象在这里插入代码片# 定义节点fromtypingimportAnyfromenvs.nlp.Lib.unittestimportresultclassNode:def__init__(self,element,nextNone):self.elementelement# 元素self.nextnext# 指针classMyLinkedList:def__init__(self):self.__headNoneself.__size0# 返回链表中元素个数property# 有它外面访问size可以是 xx.size,没有它外部访问size必须是 xx.size()defsize(self):returnself.__size# 判断链表是否为空defisEmpty(self):returnself.__size0# 在指定位置插入元素definsert(self,index,element):# 第一步检查index的合法性合理的范围[0,self.__size]ifindex0orindexself.__size:raiseIndexError(f{index}越界了)# 第二步: 创建新结点new_nodeNode(element)# 创建新结点此时新节点的next是Noneifindex0:# 如果插入位置是0需要单独谈论new_node.nextself.__head self.__headnew_nodeelse:# 第三步根据index导航到对应的节点nodeself.__head# 整个节点foriinrange(index-1):nodenode.next# 经过这个循环node最后指向 index 的前一个元素# 第四步让新结点的next指向原来[index]位置的结点[index]前一个结点的next指向新结点new_node.nextnode.nextnode.nextnew_node# 第五步元素个数增加self.__size1# 在末尾插入元素defappend(self,element):# 第一步遍历到尾结点nodeself.__head# 第二步创建新结点new_nodeNode(element)# 修复增加空链表的防御性判断ifself.__headisNone:self.__headnew_nodeelse:whilenode.nextisnotNone:nodenode.next# 出了循环,node.next None说明是尾结点# 第三步尾部追加元素node.nextnew_node# 第四步个数1self.__size1# 删除指定位置的元素defremove(self,index):# 第一步检查index的合法性合理的删除范围[0,self.__size-1],检查index是否在已有元素的下标范围self.check_exsit_index(index)ifindex0:# 头结点self.__headself.__head.nextelse:# 第二步根据index导航到[index-1]的结点nodeself.find_element(index-1)# 经过这个循环node最后指向的是index前一个结点# 第三步要记录[index]位置的结点remove_nodenode.next# 第四步让node.next指向node的next.next结点# remove_node 是[index]位置的结点# node 是[index-1]位置的结点# remove_node的next是[index1]位置的结点node.nextnode.next.next# 第五步[index]位置的结点的next和element都应该置空remove_node.elementNoneremove_node.nextNone# 第六步个数-1self.__size-1# 合法检查index是否在已有元素下标的合法范围内defcheck_exsit_index(self,index):# 是否index在已有元素的下标范围ifindex0orindexself.__size:raiseIndexError(f{index}越界了)# 修改指定位置的元素defset(self,index,element):# 第一步检查index是否在已有元素的下标范围内self.check_exsit_index(index)# 第二步 导航到index的位置nodeself.find_element(index)# 循环出来后node最后指向index位置的结点# 第三步替换[index]位置结点的元素node.elementelement# 查找元素deffind_element(self,index)-Any:nodeself.__headforiinrange(index):nodenode.nextreturnnode# 获取指定位置的元素defget(self,index):self.check_exsit_index(index)# 第二步 导航到index的位置nodeself.find_element(index)returnnode.element# 查找链表中某个元素的位置deffind(self,element):index-1nodeself.__headwhilenodeisnotNone:indexindex1ifnode.elementelement:returnindex nodenode.nextreturn-1# _str__ 是一个非常实用的魔术方法Magic Method专门用来自定义对象的字符串表示形式。# 有它可以打印出元素的值否则只能打印出地址值def__str__(self):result# 遍历nodeself.__headwhilenodeisnotNone:resultstr(node.element)result-ifnode.nextelsenodenode.nextreturnresultdef__iter__(self):nodeself.__headwhilenodeisnotNone:yieldnode.element nodenode.next# 测试if__name____main__:linkMyLinkedList()print(最初的size:,link.size)print(是否为空,link.isEmpty())link.insert(0,hello)link.insert(1,world)link.insert(2,!)link.insert(3,Life)link.insert(4,is)link.insert(5,wonderful)link.insert(6,.)print(现在的size:,link.size)print(是否为空:,link.isEmpty())print(link:,link)link.append(33)print(link:,link)link.remove(0)print(link:,link)link.remove(6)print(link:,link)link.remove(3)print(link:,link)link.set(3,score)print(link:,link)print(link.get(3))print(life的位置:,link.find(life))print(world的位置:,link.find(world))print(.的位置:,link.find(.))print(Life的位置:,link.find(Life))print(使用for循环遍历)foriteminlink:print(item,end )

相关新闻

为什么92%的AI自动化项目半年内失效?避开这7个隐形陷阱,让重复劳动真正归零

为什么92%的AI自动化项目半年内失效?避开这7个隐形陷阱,让重复劳动真正归零

更多请点击: https://codechina.net 第一章:AI 减少重复劳动 人工智能正以前所未有的深度介入日常开发与运维流程,将工程师从大量机械性、模式化任务中解放出来。这类任务虽不复杂,却耗时易错——例如日志清洗、测试用例生成、AP…

2026/8/1 0:47:10 阅读更多 →
GRE词汇记忆效率提升217%的AI协同法(基于fMRI验证的间隔重复+语义图谱双引擎)

GRE词汇记忆效率提升217%的AI协同法(基于fMRI验证的间隔重复+语义图谱双引擎)

更多请点击: https://intelliparadigm.com 第一章:AI准备GRE考试的范式革命 传统GRE备考依赖线性刷题、静态资料与固定时间表,而新一代AI系统正以动态认知建模、实时能力诊断与自适应路径生成重构整个学习范式。AI不再仅是“解题助手”&…

2026/8/1 0:47:10 阅读更多 →
商品列表翻页翻到OOM?分页调优全场景指南

商品列表翻页翻到OOM?分页调优全场景指南

商品列表翻页翻到OOM?分页调优全场景指南 去年双11压测的时候,我们压商品列表接口,压到QPS200的时候,商品库从库直接OOM挂了,查了半天发现是模拟用户翻页到第200页的时候触发的。开发写的分页SQL是标准的SELECT * FROM…

2026/8/1 0:46:10 阅读更多 →

最新新闻

图解大模型:视觉化学习Transformer与工业实践

图解大模型:视觉化学习Transformer与工业实践

1. 为什么我们需要一本全新的《图解大模型》教材?去年我在给团队做内部培训时,发现一个尴尬的现象:当我讲到Transformer架构的细节时,大部分工程师都能点头示意理解,但让他们在白板上画出完整的计算流程图时&#xff0…

2026/8/1 1:26:20 阅读更多 →
信息系统管理工程师-软件设计与 UML 建模全解析

信息系统管理工程师-软件设计与 UML 建模全解析

一、引言软件设计是信息系统开发生命周期中连接需求分析与系统实现的核心阶段,核心目标是将 "需要做什么" 的需求规格说明转化为 "如何实现" 的技术方案,是软考中级信息系统管理工程师第六章的核心考查内容,占上午基础知…

2026/8/1 1:26:20 阅读更多 →
5分钟掌握Umi-OCR:免费离线OCR软件终极指南

5分钟掌握Umi-OCR:免费离线OCR软件终极指南

5分钟掌握Umi-OCR:免费离线OCR软件终极指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。内置多国语言库。 项…

2026/8/1 1:26:20 阅读更多 →
抖音下载神器:5分钟掌握批量无水印下载终极指南

抖音下载神器:5分钟掌握批量无水印下载终极指南

抖音下载神器:5分钟掌握批量无水印下载终极指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖…

2026/8/1 1:26:20 阅读更多 →
【交换排序】不止常规写法!冒泡排序优化与双栈另类实现详解+完整可运行c语言代码

【交换排序】不止常规写法!冒泡排序优化与双栈另类实现详解+完整可运行c语言代码

冒泡排序 文章目录冒泡排序1. 问题2.算法思想3. 关于冒泡排序的优化3.1 ⼀次优化3.2 二次优化4. 复杂度分析5. 稳定性分析6. 如何用两个栈实现冒泡7. 测试函数8.头文件部分9. 实现10. 测试案例main函数输出结果1. 问题 冒泡排序似乎是初学者接触的第一个排序算法,但…

2026/8/1 1:26:20 阅读更多 →
OpenCSG协办|交大联合主办,智极松全球AI大赛开放报名,邀AI创新者参与

OpenCSG协办|交大联合主办,智极松全球AI大赛开放报名,邀AI创新者参与

面向全球AI创新者开放报名,共同探索人工智能应用创新 人工智能技术正在快速发展,越来越多开发者、创新团队和创业者正在探索AI技术在实际场景中的应用。 作为智极松AI Skillathon全球人工智能技能大赛暨全球大学生OPC创业大赛协办单位,Open…

2026/8/1 1:25:20 阅读更多 →

日新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/31 4:19:39 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →