python 实现单链表 Lined List
#构造一个节点的类 1 class Node(object): 2 def __init__(self, value=None): 3 self.value = value 4 self.next = None 5 6 class LinkedList(object): 7 8 def __init__(self, root=None, maxsize=None):#留一个尾节点是为了方便插入元素这样能实现O(1)时间的插入操作 9 self.tailnode = None 10 self.root = Node() 11 self.count = 0#可以自己设定Linked List最大能存多少元素 12 self.maxsize = maxsize 13 14 def __len__(self): 15 return self.count 16 17 def append(self, value): 18 node = Node(value) #插入第一个值时 19 if self.tailnode is None: 20 self.root.next = node 21 else: 22 if self.maxsize and len(self) >= self.maxsize: 23 raise Exception('LinkedList is Full') 24 self.tailnode.next = node 25 self.tailnode = node 26 self.count += 1 27 28 def appendleft(self, value): 29 if self.maxsize and len(self) >= self.maxsize: 30 raise Exception('LinedList Full') 31 node = Node(value) #可能在插入之前这个单链表是空的因此要处理self.root和self.tailnode 32 if self.tailnode is None: 33 self.root.next = node 34 self.tailnode = node 35 else: 36 headnode = self.root.next 37 self.root.next = node 38 node.next = headnode 39 self.count += 1 40 41 def __iter__(self): 42 for node in self.iter_node(): 43 yield node.value 44 45 def iter_node(self): 46 headnode = self.root.next 47 while headnode: 48 yield headnode 49 headnode = headnode.next 50 51 def remove(self, value): 52 prevnode = self.root 53 for node in self.iter_node(): 54 if node.value == value: 55 prevnode.next = node.next 56 self.count -= 1 57 if node is self.tailnode: 58 self.tailnode = prevnode 59 del node 60 return 1 61 prevnode = node 62 return -1 63 64 def find(self, value): 65 for index, node in enumerate(self.iter_node()): 66 if node.value == value: 67 return index 68 return -1 69 70 def popleft(self): 71 if self.tailnode is None: 72 raise Exception("pop from empty LinkedList") 73 headnode = self.root.next 74 value = headnode.value 75 if headnode is self.tailnode: 76 self.tailnode = None 77 else: 78 self.root.next = headnode.next 79 del headnode 80 self.count -= 1 81 return value 82 83 def clear(self): 84 for node in self.iter_node(): 85 del node 86 self.root = Node() 87 self.tailnode = None 88 self.count = 0 89 90 def reverse(self): 91 prevnode = self.root.next 92 self.tailnode = prevnode 93 curnode = prevnode.next 94 prevnode.next = None 95 while curnode: 96 nextnode = curnode.next 97 curnode.next = prevnode 98 if nextnode is None: 99 self.root.next = curnode 100 prevnode = curnode 101 curnode = nextnode 102 if __name__ == "__main__": 103 l = LinkedList() 104 l.append(1) 105 l.append(2) 106 l.append(3) 107 assert len(l) == 3 108 assert list(l) == [1, 2, 3] 109 l.appendleft(0) 110 assert list(l) == [0, 1, 2, 3] 111 assert len(l) == 4 112 l.remove(2) 113 assert list(l) == [0, 1, 3] 114 assert l.popleft() == 0 115 l.append('a') 116 l.append('b') 117 l.reverse() 118 assert list(l) == ['b', 'a', 3, 1] 119 l.clear() 120 assert len(l) == 0 121 assert list(l) == []
转载于:https://www.cnblogs.com/python-zkp/p/10544438.html
python 实现单链表 Lined List相关推荐
- python实现单链表与双向链表
首先看单链表class Chain(): def __init__(self):self.first = Noneself.length = 0def is_empty(self):"&qu ...
- 使用python定义单链表
前言 文章来源:CSDN@LawsonAbs 使用python定义一个单链表 链表是面试考察的一个重要部分,下面就介绍如何使用python定义一个单链表. 1. 定义一个节点类 class Node: ...
- python实现单链表快速排序升序linkedqueue_同时对多个数组进行排序
关于 同时对多个数组进行排序的搜索结果 回答 本人学习数据结构时看到的不错的总结,共享一下了 文件有一组记录组成,记录有若干数据项组成,唯一标识记录的数据项称关键字; 排序是将文件按关键字的递增(减) ...
- python反转单链表
原始单链表 反转后单链表 思路: 对于每个节点来说,把她的下一个节点,改为他的上一个节点,然后把下一个节点继续变换 建两个临时变量,上一个节点pred,下一个节点next,初始化为None 第1步,开 ...
- 数据结构与算法-python描述-单链表
# coding:utf-8# 单链表的相关操作: # is_empty() 链表是否为空 # length() 链表长度 # travel() 遍历整个链表 # add(item) 链表头部添加元素 ...
- python实现单链表快速排序升序linkedqueue_数据结构1
一. ( (本题 15 分)试设计一个结点数据类型为整型的带表头结点的有序单 链表,然后设计一个算法,该算法将这个有序单链表划分成两个单链表,使 得第一个单链表中包含原单链表中所有数值为奇数的结点, ...
- python实现单链表快速排序升序linkedqueue_LeetCode 总结 - 搞定 Linked List 面试题
链表删除 [203] Remove Linked List Elements [19] Remove Nth Node From End of List [83] Remove Duplicates ...
- python求单链表的长度_709. 设计链表(Python)
题目 难度:★★☆☆☆ 类型:链表,设计题 设计链表的实现.您可以选择使用单链表或双链表.单链表中的节点应该具有两个属性:val 和 next.val 是当前节点的值,next 是指向下一个节点的指针 ...
- python实现单链表快速排序升序linkedqueue_数据结构回顾
顺序结构 顺序栈(Sequence Stack) 1 2 3 4 5 6typedef struct { ElemType *elem; int top; int size; int incremen ...
最新文章
- 集成学习(一)—预备知识:分类树和回归树
- Selenium 基于python 安装以及配置谷歌浏览器启动
- Fedora10 以root身份自启动
- java setrequestheader_Java SampleResult.setRequestHeaders方法代码示例
- 两点定标法_一种两点校正红外热像仪的非均匀性的模块及方法
- Qt|设计模式工作笔记-对单例模式进一步的理解(静态加单例实现专门收发UDP对象)
- 有了优秀的可临摹PSD分层模板|瞬间提升海报质感!
- 风险策略中的五层决策
- playbook管理配置文件
- Python标准类型的分类
- 用Python将一个文件夹下多个子文件夹中相同文件拷贝到同一个文件夹中并重新命名
- 毕设项目 - 基于SSM的音乐网站(含源码+论文)
- 给SLAM小车添加 手柄遥控 功能 罗技F710和PS4 手柄
- 详解拉东(Radon)变换原理、直线检测、代码实现
- vc707 MicroBlaze LCD 试验
- 添加网络位置(共享目录)
- Eclipse TPTP平台配置详细步骤Ver1.0
- JDBC如何防止SQL注入
- OpenCV 实时对象跟踪(质心跟踪)
- 大厂高频面试题之Java内存区域分布
热门文章
- 神奇的口袋--刚好装满背包的方法总数
- 基于STM32开发板I²C总线通信协议浅析
- 【WPS表格】数据透视表:修改行列字段顺序
- 【linux学习笔记】嵌入式linux学习笔记
- scipy.misc.imresize改为Image.resize方法
- 原根算法C语言,算法导论-----数论-----元素的幂
- 苹果保修期多久_苹果和安卓数据线怎么选?一根数据线质保三年,小米生态链做到了...
- xp 本地计算机策略组,本地组策略-win10没有本地安全策略组怎么打开软件
- Matlab之绘制三维曲面图
- c语言解除指针引用什么意思,“解引用”指针是什么意思?