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/10/3 6:05:26 阅读更多 →
GRE词汇记忆效率提升217%的AI协同法(基于fMRI验证的间隔重复+语义图谱双引擎)

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

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

2026/9/28 9:11:52 阅读更多 →
商品列表翻页翻到OOM?分页调优全场景指南

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

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

2026/10/8 20:54:07 阅读更多 →

最新新闻

绿色版Directory Opus 9.5.0.0实战:配置、批量处理与避坑指南

绿色版Directory Opus 9.5.0.0实战:配置、批量处理与避坑指南

简介:Directory Opus 9.5.0.0 3568.x86 绿色特别版是一款面向 Windows 32 位系统的专业文件管理工具,适合希望替代系统自带资源管理器、追求高效文件操作与便携使用的普通及进阶用户。它支持双面板或多面板布局,集成批量重命名、目录同步、快…

2026/10/11 10:29:12 阅读更多 →
情感分析从模型跑通到业务敢用:技术选型、微调参数与避坑指南

情感分析从模型跑通到业务敢用:技术选型、微调参数与避坑指南

简介:这份资源是一篇系统梳理自然语言处理中情感分析技术的docx文档,面向NLP研究人员、数据科学家及从事情感分析应用的专业人士。内容从研究背景与意义切入,依次探讨基于规则、机器学习与深度学习三类方法的原理与差异,并通过公开…

2026/10/11 10:29:12 阅读更多 →
2.5 倍更快、缩小 97%:Claude Code Rust 性能基准测试深度剖析

2.5 倍更快、缩小 97%:Claude Code Rust 性能基准测试深度剖析

2.5 倍更快、缩小 97%:Claude Code Rust 性能基准测试深度剖析 【免费下载链接】claude-code-rust 🚀 Rust 全量重构的 Claude Code - 性能提升 2.5x,体积减少 97% | High-performance Rust implementation of Claude Code with 2.5x faster …

2026/10/11 10:29:12 阅读更多 →
Eta接入MCP生态:连接远程工具服务器与安全配置Bearer Token

Eta接入MCP生态:连接远程工具服务器与安全配置Bearer Token

【免费下载链接】Eta System-level Android AI Agent with direct OS access. | Android 系统级 AI Agent——越过沙盒,让模型访问底层API、屏幕、终端与你的数据 项目地址: https://gitcode.com/gh_mirrors/eta9/Eta 点击查看 免费下载 Eta 是一款 And…

2026/10/11 10:29:12 阅读更多 →
ArcGIS Pro水文水环境全流程教学:数据处理、水文分析、三维模拟、二次开发与论文实战

ArcGIS Pro水文水环境全流程教学:数据处理、水文分析、三维模拟、二次开发与论文实战

ArcGIS Pro 是一款集成数据采集、处理、分析与可视化的专业 GIS 平台,广泛应用于水文、水资源、水生态和水环境研究。在水文分析方面,基于 DEM 可实现流域划分、河网提取及控制面积计算;支持矢量与栅格数据融合,便于空间关联分析。…

2026/10/11 10:29:12 阅读更多 →
WPS表格函数公式实战:VLOOKUP、SUMIFS避坑与组合应用

WPS表格函数公式实战:VLOOKUP、SUMIFS避坑与组合应用

简介:WPS官方函数公式视频教程是一份面向职场办公与数据分析人群的精选函数指南,旨在帮助用户系统掌握VLOOKUP、IF、SUMIF、COUNTIF等高频函数的实用技巧,解决数据处理中查找、统计、排序与日期计算的常见难题。压缩包共1个PDF文件&#xff0…

2026/10/11 10:28:12 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →