python实现双向链表的操作

时间:2021-06-18 17:06:20
python实现双向链表的操作

双向链表

双向链表又叫做双链表,每个节点有两个指针域和一个数据域。prev指针域指向前一个节点,next指针域指向下一个节点。注意,第一个节点的prev指针域指向空值,最后一个节点的next域也是指向空值。

双链表的主要操作跟单链表一样,具有如下操作

  1. is_empty() 链表是否为空

  2. length() 链表长度

  3. travel() 遍历整个链表

  4. add(item) 链表头部添加元素

  5. append(item) 链表尾部添加元素

  6. insert(pos, item) 指定位置添加元素

  7. remove(item) 删除节点

  8. search(item) 查找节点是否存在

python 实现:

#_*_coding:utf-8_*_

class Node(object):
def __init__(self, item):
self.item = item
self.prev = None
self.next = None class DoubleLinkList(object):
def __init__(self, node=None):
'''_head 作为类内部使用,对外不可见'''
self.__head = node def is_empty(self):
'''判断链表是否为空'''
return self.__head is None def length(self):
'''链表的长度'''
#特别要考虑当链表是空的情况
# cur游标,用来移动遍历节点
cur = self.__head
count = 0
while cur != None:
count += 1
cur = cur.next return count def travel(self):
'''遍历整个链表'''
cur = self.__head if cur == None:
print("empty linklist")
return
while cur != None:
print(cur.item, end=' ')
cur = cur.next
print('')
def add(self,item):
'''在链表头部添加元素,头插法'''
node = Node(item)
#指针指向的顺序可以变化
node.next = self.__head
self.__head = node
node.next.prev = node def append(self,item):
'''在链表尾部添加元素'''
node = Node(item)
cur = self.__head
#如果链表是空,则将头节点直接指向Node
if self.is_empty():
self.__head = node
else:
while cur.next != None:
cur = cur.next cur.next = node
node.prev = cur def insert(self,pos, item):
'''在链表指定的位置添加元素'''
"""
:param pos从0开始
"""
if pos <= 0:
self.add(item)
elif pos > (self.length() -1):
self.append(item)
else: cur = self.__head
count = 0
while count < pos:
count += 1
cur = cur.next
node = Node(item) node.next = cur
cur.prev.next = node
cur.prev = node
node.prev = cur.prev def remove(self, item):
'''删除某个元素的节点'''
cur = self.__head
while cur != None :
if cur.item == item:
#先判断此节点是否为头节点
if cur == self.__head:
self.__head = cur.next
if cur.next:
#要判断链表是否只有一个节点
cur.next.prev = None
else:
cur.prev.next = cur.next
if cur.next:
#如果删除的不是最后一个节点
cur.next.prev = cur.prev
break
else:
cur = cur.next def search(self, item):
''' 查找节点是否存在'''
cur = self.__head
while cur != None:
if cur.item == item:
return True
else:
cur = cur.next
return False if __name__ == '__main__':
ll = DoubleLinkList()
print(ll.is_empty())
print(ll.length())
ll.append(1)
ll.append(2)
ll.travel()
ll.add(3)
ll.travel()
ll.insert(2, 4)
ll.travel()
print(ll.search(3))
ll.travel()
ll.remove(2)
ll.travel()

运行结果:

True
0
1 2
3 1 2
3 1 4 2
True
3 1 4 2
3 1 4

2020年最新Python教程:

如果你处于想学Python或者正在学习Python,Python的教程不少了吧,但是是最新的吗?

说不定你学了可能是两年前人家就学过的内容,在这小编分享一波2020最新的Python教程。

python实现双向链表的操作
python实现双向链表的操作
python实现双向链表的操作
python实现双向链表的操作

以上这些教程小编已经为大家打包准备好了,希望对正在学习的你有所帮助!

获取方式,私信小编 “ 资料 ”,即可免费获取哦!

 

python实现双向链表的操作的更多相关文章

  1. &lpar;转&rpar;Python 实现双向链表(图解)

    原文:https://blog.csdn.net/qq490691606/article/details/49948263 Python 实现双向链表(图解)双向链表双向链表也叫双链表,是链表的一种, ...

  2. Python开发【第三篇】:Python基本之文件操作

    Python基本之文本操作 一.初识文本的基本操作 在python中打开文件有两种方式,即:open(...) 和  file(...) ,本质上前者在内部会调用后者来进行文件操作,推荐使用 open ...

  3. 【Python数据分析】Python3操作Excel&lpar;二&rpar; 一些问题的解决与优化

    继上一篇[Python数据分析]Python3操作Excel-以豆瓣图书Top250为例 对豆瓣图书Top250进行爬取以后,鉴于还有一些问题没有解决,所以进行了进一步的交流讨论,这期间得到了一只尼玛 ...

  4. &lbrack;python&rsqb;用Python进行SQLite数据库操作

    用Python进行SQLite数据库操作 1.导入Python SQLITE数据库模块 Python2.5之后,内置了SQLite3,成为了内置模块,这给我们省了安装的功夫,只需导入即可~  ]: u ...

  5. python学习笔记&colon;文件操作和集合(转)

    转自:http://www.nnzhp.cn/article/16/ 这篇博客来说一下python对文件的操作. 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句 ...

  6. python os&amp&semi;shutil 文件操作

    python os&shutil 文件操作 # os 模块 os.sep 可以取代操作系统特定的路径分隔符.windows下为 '\\' os.name 字符串指示你正在使用的平台.比如对于W ...

  7. python对mysql数据库操作的三种不同方式

    首先要说一下,在这个暑期如果没有什么特殊情况,我打算用python尝试写一个考试系统,希望能在下学期的python课程实际使用,并且尽量在此之前把用到的相关技术都以分篇博客的方式分享出来,有想要交流的 ...

  8. Python实现浏览器自动化操作

    Python实现浏览器自动化操作 (2012-08-02 17:35:43) 转载▼     最近在研究网站自动登录的问题,涉及到需要实现浏览器自动化操作,网上有不少介绍,例如使用pamie,但是只是 ...

  9. &lbrack;转载&rsqb;Python实现浏览器自动化操作

    原文地址:Python实现浏览器自动化操作作者:rayment   最近在研究网站自动登录的问题,涉及到需要实现浏览器自动化操作,网上有不少介绍,例如使用pamie,但是只是支持IE,而且项目也较久没 ...

随机推荐

  1. Netty 自动重连

    from: http://www.dozer.cc/2015/05/netty-auto-reconnect.html 自动重连 用 Netty 写 Client 和 Server 的时候必须要去处理 ...

  2. spring刚开始学习搭建

    下载的软件包地址: http://repo.springsource.org/libs-release-local/org/springframework/spring 用maven进行快速开始: h ...

  3. 一次有趣的XSS漏洞挖掘分析(3)最终篇

    这真是最后一次了.真的再不逗这个程序员了.和预期一样,勤奋的程序员今天又更新程序了.因为前面写的payload都有一个致命的弱点,就是document.write()会完全破坏DOM结构.而且再“完事 ...

  4. Oracle免费的便捷Web应用开发框架

    Oracle免费的便捷Web应用开发框架 APEX 总体来说,APEX是我见过最便捷最高效的开发框架,用起来比PHP还舒服.上手简单,学习成本极低,曾经有个做行政的小女生,在我指导下两天就可以开发出简 ...

  5. Photos FrameWork 续

    1. Model PHAsset .PHAssetCollection.PHCollectionList 是Photos框架中的模型类,PHAsset类模型是图片或者视频文件数据:PHAssetCol ...

  6. 【表格】大于号转义符&amp&semi;amp&semi;gt&semi;---小于号转义符&amp&semi;amp&semi;lt&semi;

    关于来源:百度及个人经验. 常用的都是个人尝试过或个人常用的,其它的都是从百度来的.使用前建议写个HTML的Demo试试看 ^_^ 比心 < < < 小于号 > > &g ...

  7. &lbrack;Swift&rsqb;LeetCode620&period; 有趣的电影 &vert; Not Boring Movies

    SQL架构 Create table If Not Exists cinema (id ), description varchar(), rating , )) Truncate table cin ...

  8. 032:基于Consul和MGR的MySQL高可用架构

    目录 一.Consul 1.Consul简介 2.准备环境 3.Consul 安装 4.Consul配置文件 5.Consul 服务检查脚本 6.Consul启动 二.MGR搭建 1.MGR配置 2. ...

  9. 在建立与服务器的连接时出错。在连接到 SQL Server 2005 时&comma;在默认的设置下 SQL Server 不允许进行远程连

    在建立与服务器的连接时出错.在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连 sql server服务器sqlserver远程连接数据库防火墙在建立 ...

  10. freess(未测试)

    freess 使用 nodejs 配合 *-windows 实现FQ (windows) 使用方法: 如果你没有安装nodejs请先安装,访问 https://nodejs.org ...