Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
发布时间 - 2026-01-11 03:27:31 点击率:次本文实例讲述了Python数据结构与算法之链表定义与用法。分享给大家供大家参考,具体如下:

本文将为大家讲解:
(1)从链表节点的定义开始,以类的方式,面向对象的思想进行链表的设计
(2)链表类插入和删除等成员函数实现时需要考虑的边界条件,
prepend(头部插入)、pop(头部删除)、append(尾部插入)、pop_last(尾部删除)
2.1 插入:
空链表
链表长度为1
插入到末尾
2.2 删除
空链表
链表长度为1
删除末尾元素
(3)从单链表到单链表的一众变体:
带尾节点的单链表
循环单链表
双链表
1. 链表节点的定义
class LNode: def __init__(self, elem, next_=None): self.elem = elem self.next = next_
2. 单链表的实现
重点理解插入、删除的实现及其需要考虑的边界条件:
class LinkedListUnderflow(ValueError):
pass
class LList:
def __init__(self):
self._head = None
def is_empty(self):
return self._head is None
def prepend(self, elem):
self._head = LNode(elem, self._head)
def pop(self):
if self._head is None:
raise LinkedListUnderflow('in pop')
e = self._head.elem
self._head = self._head.next
return e
def append(self, elem):
if self._head is None:
self._head = LNode(elem)
return
p = self._head
while p.next is not None:
p = p.next
p.next = LNode(elem)
def pop_last(self):
if self._head is None:
raise LinkedListUnderflow('in pop_last')
p = self._head
if p.next is None:
e = p.elem
self._head = None
return e
while p.next.next is not None:
p = p.next
e = p.next.elem
p.next = None
return e
简单总结:
(0)能够访问 p.next.next 的前提是 p.next 不为空;
(1)尾部插入,如果链表不为空,需且仅需改变的是尾部节点的指针;
(2)尾部删除,如果链表长度不为空,需且仅需改变的是倒数第二个节点的指针。
单链表的简单变形:具有尾部节点的单链表
class LList1(LList): def __init__(self): LList.__init__(self) self._rear = None ...
我们仅需重写的是:头部的插入、尾部的插入、尾部的删除
def prepend(self, elem):
if self._head is None:
self._head = LNode(elem)
self._rear = self._head
else:
self._head = LNode(elem, self._head)
def append(self, elem):
if self._head is None:
self._head = LNode(elem)
self._rear = self._head
else:
self._rear.next = LNode(elem)
self._rear = self._rear.next
def pop_last(self):
if self._head is None:
raise LinkedListUnderflow('in pop_last')
p = self._head
if p.next is None:
e = p.elem
self._head = None
return e
while p.next.next is not None:
p = p.next
e = p.next.elem
self._rear = p
p.next = None
return e
单链表的变体:循环单链表
class LCList:
def __init__(self):
self._rear = None
def prepend(self, elem):
if self._rear is None:
self._rear = LNode(elem)
self._rear.next = self._rear
else:
self._rear.next = LNode(elem, self._rear.next)
def append(self, elem):
self.prepend(elem)
self_rear = self._rear.next
def pop(self):
if self._rear is None:
raise LinkedListUnderflow('in pop')
p = self._rear.next
if p is None:
self._rear = None
else:
self._rear.next = p.next
return p.elem
def printall(self):
if self._rear is None:
raise ...
p = self._rear.next
while True:
print(p.elem)
if p is self._rear:
break
p = p.next
更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
# Python
# 数据结构
# 算法
# 链表
# 单链表、循环链表
# python单向循环链表实例详解
# Python数据结构之循环链表详解
# python实现数据结构中双向循环链表操作的示例
# python/golang实现循环链表的示例代码
# python单向循环链表原理与实现方法示例
# Python双向循环链表实现方法分析
# Python实现的单向循环链表功能示例
# python双向链表实例详解
# Python实现双向链表基本操作
# python双向循环链表实例详解
# 的是
# 仅需
# 为空
# 长度为
# 进阶
# 操作技巧
# 相关内容
# 第二个
# 给大家
# 重写
# 将为
# 更多关于
# 所述
# 程序设计
# 使用技巧
# 面向对象
# 时需
# 编程技巧
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道
如何在局域网内绑定自建网站域名?
Laravel PHP版本要求一览_Laravel各版本环境要求对照
如何确认建站备案号应放置的具体位置?
googleplay官方入口在哪里_Google Play官方商店快速入口指南
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
Laravel如何使用.env文件管理环境变量?(最佳实践)
node.js报错:Cannot find module 'ejs'的解决办法
如何制作一个表白网站视频,关于勇敢表白的小标题?
Laravel模型关联查询教程_Laravel Eloquent一对多关联写法
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】
ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法
Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】
Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】
SQL查询语句优化的实用方法总结
Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】
Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】
如何在宝塔面板中修改默认建站目录?
Windows10如何更改计算机工作组_Win10系统属性修改Workgroup
如何在新浪SAE免费搭建个人博客?
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
Laravel如何使用Service Container和依赖注入?(代码示例)
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
网站页面设计需要考虑到这些问题
Java类加载基本过程详细介绍
Laravel如何与Inertia.js和Vue/React构建现代单页应用
Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置
如何用免费手机建站系统零基础打造专业网站?
如何注册花生壳免费域名并搭建个人网站?
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
如何为不同团队 ID 动态生成多个独立按钮
如何用AI帮你把自己的生活经历写成一个有趣的故事?
深圳网站制作的公司有哪些,dido官方网站?
nodejs redis 发布订阅机制封装实现方法及实例代码
JavaScript如何实现继承_有哪些常用方法
如何自定义建站之星模板颜色并下载新样式?
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】
微信小程序 配置文件详细介绍
公司网站制作价格怎么算,公司办个官网需要多少钱?
米侠浏览器网页图片不显示怎么办 米侠图片加载修复
java中使用zxing批量生成二维码立牌
米侠浏览器网页背景异常怎么办 米侠显示修复
Bootstrap CSS布局之列表
如何用已有域名快速搭建网站?
打开php文件提示内存不足_怎么调整php内存限制【解决方案】
香港网站服务器数量如何影响SEO优化效果?
Laravel如何发送系统通知?(Notification渠道示例)
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践

