当前位置: 首页 > news >正文

力扣刷题记录---利用python实现链表的基本操作

文章目录

  • 前言
  • 一、利用python实现链表的基本操作
    • 1.节点的定义使用类实现:
    • 1.链表的定义使用类实现:
    • 3.判断是否为空函数实现:
    • 4.链表长度函数实现:
    • 5.遍历链表函数实现:
    • 6.头插法函数实现:
    • 7.尾插法函数实现:
    • 8.在链表指定位置插入值函数实现:
    • 9.删除某一个值函数实现:
    • 10查看某个节点是否存在函数实现:


前言

如何使用python实现链表的基本操作,包括结点的定义,链表的定义,求链表长度,链表是否为空等等一系列函数


提示:以下是本篇文章正文内容,下面案例可供参考

一、利用python实现链表的基本操作

链表中的节点应该包含数值和指向下一个元素的地址。

1.节点的定义使用类实现:

class Node():def __init__(self,elem):self.elem = elemself.next = None

由于python万物皆对象,变量实际上是对象的引用,相当于就保存了对象的地址

1.链表的定义使用类实现:

链表的定义如下,也是使用类实现:

class Single_LinkList():def __init__(self,node = None):self.head = node

初始化时会自动生成一个空链表,其中head指向None

3.判断是否为空函数实现:

    def is_empty(self):"""链表是否为空"""if self.head == None:return Trueelse:return False

4.链表长度函数实现:

    def length(self):"""链表长度"""len = 0cur = self.headwhile cur != None:len = len + 1cur = cur.nextreturn len

5.遍历链表函数实现:

    def travel(self):"""遍历链表"""cur =  self.headwhile cur != None:print(cur.elem)cur = cur.next

6.头插法函数实现:

    def add(self,item):"""链表头部进行添加元素"""node = Node(item)node.next = self.headself.head = node

7.尾插法函数实现:

    def append(self,item):"""链表尾部进行添加元素"""node = Node(item)cur = self.headif self.is_empty():self.head = nodeelse:while cur.next != None:cur = cur.nextcur.next = nodenode.next = None

8.在链表指定位置插入值函数实现:

    def insert(self,pos,item):"""在指定位置上添加元素:param pos: 从0开始:param item::return:"""node = Node(item)count = 0cur = self.headwhile cur != None:if count == pos - 1:node.next = cur.nextcur.next = nodebreakcur = cur.nextcount = count + 1

9.删除某一个值函数实现:

    def remove(self,item):"""删除某一个节点"""cur = self.headcount = 0if self.is_empty():print("删除失败")elif self.head.elem == item:self.head = self.head.nextelse:while cur.next != None:if cur.next.elem == item:cur.next = cur.next.nextbreakcur = cur.next

10查看某个节点是否存在函数实现:

    def search(self,item):"""查看某个节点是否存在"""cur = self.headwhile cur != None:if cur.elem == item:return Truecur = cur.nextreturn False

完整代码如下:

class Node():def __init__(self,elem):self.elem = elemself.next = Noneclass Single_LinkList():def __init__(self,node = None):self.head = nodedef is_empty(self):"""链表是否为空"""if self.head == None:return Trueelse:return Falsedef length(self):"""链表长度"""len = 0cur = self.headwhile cur != None:len = len + 1cur = cur.nextreturn lendef travel(self):"""遍历链表"""cur =  self.headwhile cur != None:print(cur.elem)cur = cur.nextdef add(self,item):"""链表头部进行添加元素"""node = Node(item)node.next = self.headself.head = nodedef append(self,item):"""链表尾部进行添加元素"""node = Node(item)cur = self.headif self.is_empty():self.head = nodeelse:while cur.next != None:cur = cur.nextcur.next = nodenode.next = Nonedef insert(self,pos,item):"""在指定位置上添加元素:param pos:0开始:param item::return:"""node = Node(item)count = 0cur = self.headwhile cur != None:if count == pos - 1:node.next = cur.nextcur.next = nodebreakcur = cur.nextcount = count + 1def remove(self,item):"""删除某一个节点"""cur = self.headcount = 0if self.is_empty():print("删除失败")elif self.head.elem == item:self.head = self.head.nextelse:while cur.next != None:if cur.next.elem == item:cur.next = cur.next.nextbreakcur = cur.nextdef search(self,item):"""查看某个节点是否存在"""cur = self.headwhile cur != None:if cur.elem == item:return Truecur = cur.nextreturn False

测试代码如下:

if __name__ == "__main__":Linklist = Single_LinkList()print(Linklist.is_empty())print(Linklist.length())print(Linklist.append(1))print(Linklist.is_empty())print(Linklist.length())print(Linklist.append(2))print(Linklist.append(3))print(Linklist.append(4))print(Linklist.append(5))Linklist.add(8)Linklist.insert(1,10)Linklist.remove(8)# Linklist.remove(8)Linklist.travel()print(Linklist.search(1))

结果如下:
在这里插入图片描述

http://www.lryc.cn/news/101310.html

相关文章:

  • OpenAI重磅官宣ChatGPT安卓版本周发布,现已开启下载预约,附详细预约教程
  • PHP 支付宝支付、订阅支付(周期扣款)整理汇总
  • python-pytorch基础之神经网络回归
  • linux中通过.desktop文件执行bash命令打开chrome浏览器并传参
  • ChatGPT的应用与发展趋势:解析人工智能的新风口
  • 使用maven打jar包时,如何只把依赖的其它jar中的类打进jar包,没有依赖的其它jar包的类文件不打进来?
  • arm neon/fpu/mfloat
  • Maven基础之项目创建、packaging
  • c++ std::map 使用注意事项
  • Camera HAL/ISP 专业术语大全
  • POI的简单入门
  • 如何将笔记本作为另一台电脑的副屏显示
  • 深入理解正则表达式:为什么它在Java中如此重要?
  • jmeter实现webservice接口测试
  • js 四舍五入保留一位小数 求百分比
  • 文件上传漏洞总结2
  • 【组内工作】木马回联
  • 未来将会有更多基于 Cortana 的设备
  • 嵌入式硬件系统的基本组成
  • def __init__(self, **kwargs):中的**kwargs是什么意思
  • web攻击面试|网络渗透面试(三)
  • 数据分析方法
  • Spring全家桶---白虎篇
  • 深度优先搜索|79, 695,212
  • 论文阅读与管理方法论
  • 基于OAI与Ueransim的5G网络切片平台构成简述
  • 论文笔记:Adjusting for Autocorrelated Errors in Neural Networks for Time Series
  • DataEase开源BI工具安装_数据全量_增量同步_大屏拖拽自动生成_多数据源支持_数据血缘分析---大数据工作笔记0183
  • 如何提升程序员的软素质
  • msvcp100.dll丢失怎么修复,这三个常用的修复方法可以解决