首先看单链表class Chain():

    def __init__(self):self.first = Noneself.length = 0def is_empty(self):"""是否为空"""return self.first == Nonedef add(self, val):"""头部添加"""node = Node(val)temp = self.firstnode.next = tempself.first = nodeself.length += 1def append(self, val):"""尾部添加"""node = Node(val)if self.first:temp = self.firstmid = Nonewhile temp:mid = temptemp = temp.nextmid.next = nodeelse:self.first = nodeself.length += 1def __setitem__(self, item, val):"""插入元素"""node = Node(val)temp, index = self.first, 0if item == 0:node.next, self.first = self.first, nodeself.length += 1else:while temp:if index+1 == item:node.next, temp.next = temp.next, nodeself.length += 1breakindex += 1temp = temp.nextdef __len__(self):"""链表长度"""return self.length@propertydef len_2(self):"""链表长度(时间复杂度O(n))"""if not self.first:return 0else:temp = self.firstlength = 1while temp.next:length += 1temp = temp.nextreturn lengthdef pop(self):"""删除尾部元素(有错误)"""temp = self.firstmid = Nonewhile temp.next:mid, temp = temp, temp.nextif mid:mid.next = Noneself.length -= 1def __delitem__(self, item):"""删除某一位置元素"""temp, index = self.first, 0if item == 0:if self.first:self.first = self.first.nextself.length -= 1while temp:if index + 1 == item:temp.next = temp.next.nextself.length -= 1index += 1temp = temp.nextdef bianli(self):"""遍历链表"""temp = self.firstwhile temp:print(temp.value)temp = temp.nextdef reverse1(self):"""反转链表"""              temp = self.first              prev = None              while temp:                    temp_next = temp.next                    temp.next = prev                    prev = temp                    temp = temp_next              self.first =  prevdef reverse2(self):"""反转链表"""      chain_list = []temp = self.firstwhile temp:chain_list.append(temp.value)temp = temp.nexttemp = self.firstwhile temp:temp.val = chain_list.pop()temp = temp.nextdef __iter__(self):passdef __next__(self):pass
class Node():def __init__(self, val):self.value = valself.next = None

在来看双向链表

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class Node():def __init__(self, val):self.value = valself.prev = Noneself.next = None
class Chain():def __init__(self):self.first = Nonedef is_empty(self):"""是否为空"""return self.first == Nonedef add(self, val):"""头部添加"""node = Node(val)self.first.prev = nodetemp = self.firstnode.next = tempself.first = nodedef append(self, val):"""尾部添加"""node = Node(val)temp = self.firstif not temp:self.first = nodeelse:while temp.next:temp = temp.nextnode.prev = temptemp.next = nodedef __delitem__(self, item):"""删除元素"""temp, index = self.first, 0while temp:if index == item:if temp.next:temp.next.prev, temp.prev.next = temp.prev, temp.nextelse:temp.prev.next = Noneindex += 1temp = temp.nextdef travel(self):temp = self.firstwhile temp:print(temp.value)temp = temp.next

python实现单链表与双向链表相关推荐

  1. python之链表、单链表、双向链表、单向循环链表

    python之链表.单链表.双向链表.单向循环链表 链表 顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时,又需要进行数据的搬迁,所以使用起来并非很灵活 链表结构可以充分利用计算机 ...

  2. 「数据结构 | 链表」单链表、双向链表节点操作演示动画

    目录 1. 什么是链表 2. 链表数据结构 2.1 单链表数据结构(Java) 2.2 双向链表数据结构(Java) 3. 单链表操作动画 3.1 新增节点 3.2 删除节点 4. 双向链表操作动画 ...

  3. 【数据结构与算法】 01 链表 (单链表、双向链表、循环链表、块状链表、头结点、链表反转与排序、约瑟夫环问题)

    一.线性表 1.1 概念与特点 1.2 线性表的存储结构 1.3 常见操作 1.4 应用场景 二.链表 2.1 链表简介 2.2 单向链表(单链表) 2.21 基本概念 2.22 单链表基本操作 2. ...

  4. 线性表详解(静态链表、单链表、双向链表、循环链表)

    目录 申明 1. 线性表的定义 2. 线性表的抽象数据类型 3. 线性表的顺序存储结构 3. 1 顺序存储定义 3. 2 顺序存储方式 3. 3 数据长度与线性表长度区别 3. 4 地址计算方法 4. ...

  5. python实现单链表快速排序升序linkedqueue_同时对多个数组进行排序

    关于 同时对多个数组进行排序的搜索结果 回答 本人学习数据结构时看到的不错的总结,共享一下了 文件有一组记录组成,记录有若干数据项组成,唯一标识记录的数据项称关键字; 排序是将文件按关键字的递增(减) ...

  6. 栈,队列,单链表,双向链表

    1. 定义头文件 实现栈方法的定义,注意这里用到了全局的静态数组,可以通过这种方式保护数据. main.c,实现存储 队列,创建头文件queue.h 创建queue.c 实现main函数 单链表 在定 ...

  7. 2.3.3单链表的双向链表

    2.3.3双向链表 插入.删除 指在前驱和后驱方向都能游历(遍历)的线性链表 双向链表的每个结点有两个指针域 [结构]:prior data next 双链表通常采用带头结点的循环链表形式 可理解为首 ...

  8. 数据结构:单链表和双向链表

    1.链表 链表是有序的列表,但是它在内存中是存储如下 小结: 链表是以节点的方,来存储是链式存储 每个节点包含data域,next域:指向下一个节点 如图:发现链表的各个节点不一定是连续存储 链表分带 ...

  9. python求单链表的长度_709. 设计链表(Python)

    题目 难度:★★☆☆☆ 类型:链表,设计题 设计链表的实现.您可以选择使用单链表或双链表.单链表中的节点应该具有两个属性:val 和 next.val 是当前节点的值,next 是指向下一个节点的指针 ...

最新文章

  1. python 用户认证_python基于mysql的用户认证
  2. 1月12日,HTML学习笔记2
  3. Java接口多线程并发测试 (一)
  4. [云炬python3玩转机器学习]5-2最小二乘法a和b推导
  5. Distributed Systems笔记-Cryptographic Protocols
  6. 我的Java教程,不断整理,反复学习,记录着那些年大学奋斗的青春
  7. MongoDB(课时30 $group)
  8. 连续性的设计——改善产品的体验
  9. [转载] OpenCV-Python图像位与运算bitwise_and函数详解
  10. 【引向】全栈开发工程师之路
  11. Java UDP通信详解:单播、广播、组播
  12. C#试玩程序设计试题——定向越野(迷宫)
  13. 墨者学院—网络安全篇3
  14. 互联网日报 | 张朝阳宣布2020年搜狐已盈利;永辉超市达成千店目标;腾讯云原生注册用户规模超100万...
  15. OpenCV源码剖析之imread PNG
  16. 玩游戏计算机缺失msvcp140,绝地求生计算机丢失MSVCP140.dll解决办法
  17. 5.larval 验证规则
  18. 【转载】CodeWarrior IDE使用tips之prm链接文件详解(自定义存储器分区以及自定义RAM数据初始化与在RAM中运行函数)...
  19. S4HANA 2020输入会计凭证提示需要输入税码的配置
  20. 【国产MCU移植】移植RT-Thread到国产芯片HC32L196

热门文章

  1. composer的安装以及laravel项目的生成
  2. ASP.NET实现微信功能(2)(服务号高级群发)
  3. EXCEL的下拉列表
  4. 【BC】如何将自定义的区域菜单添加到系统默认的菜单中
  5. ABAP小写金额转大写
  6. 从一则笑话里分析项目需求的缺陷
  7. 你有多了解hybris ?
  8. 为什么一般不将'在制品转出科目'设为初级成本要素
  9. MRP区域“MRP Area”的定义以及作用
  10. “天猫化”的考拉,还是考拉吗?