Python实现双向链表基本操作


Posted in Python onMay 25, 2022

双向链表的基本操作的实现,供大家参考,具体内容如下

在之前的博客中介绍了三种链表,分别是单链表、单向循环链表以及双向链表。本篇博客将用Python来实现双向链表的如下操作。(用到的工具是Python 3)

is_empty() : 判断链表是否为空
length() : 返回链表的长度
travel() : 遍历
add(item) : 在头部添加一个节点
append(item) : 在尾部添加一个节点
insert(pos, item) : 在指定位置 pos 添加一个节点
remove(item) :  删除一个节点
search(item) :  查找节点是否存在

Python实现

class Node(object):
    '''双向链表节点'''
    def __init__(self,item):
        self.item = item
        self.next = None
        self.prev = None
class DoubleLink(object):
    '''双向链表'''
    def __init__(self):
        self._head = None
    
    def is_empty(self):
        '''判断是否为空'''
        return self._head == None
    
    def length(self):
        '''返回链表的长度'''
        cur = self._head
        count = 0
        while cur!= None:
            count += 1
            cur = cur.next
        return count
    
    def travel(self):
        '''遍历链表'''
        cur = self._head
        while cur != None:
            print(cur.item)
            cur = cur.next
        print("")
    
    def add(self, item):
        '''头部插入元素'''
        node = Node(item)
        if self.is_empty():
            # 如果是空链表,将_head指向None
            self._head = node
        else:
            # 将node的next指向_head的头节点
            node.next = self._head
            # 将_head的头节点的prev指向node
            self._head.prev = node
            # 将_head 指向node
            self._head = node
    
    def append(self, item):
        '''尾部插入元素'''
        node = Node(item)
        if self.is_empty():
            self._head = node
        else:
            # 移动到链表尾部
            cur = self._head
            while cur.next != None:
                cur = cur.next
            # 将尾结点cur的next指向node
            cur.next = node
            # 将node的prev指向cur
            node.prev = cur
    
    def search(self, item):
        '''查找元素是否存在'''
        cur = self._head
        while cur != None:
            if cur.item == item:
                return True
            cur = cur.next
        return False

指定位置插入节点

在该操作中,要注意链的指向的先后顺序。

Python实现双向链表基本操作

def insert(self, pos, item):
        '''在指定位置添加节点'''
        if pos <= 0:
            self.add(item)
        elif pos > (self.length() - 1):
            self.append(item)
        else:
            node = Node()
            cur = self._head()
            count = 0
            # 移动到指定的前一个位置
            while cur < pos - 1 :
                count += 1
                cur = cur.next
            # 将node的prev指向cur
            node.prev = cur
            # 将node的next指向cur的下一个节点
            node.next = cur.next
            # 将cur的下一个节点的prev指向node
            cur.next.prev = node
            # 将cur.next指向node
            cur.next = node

删除元素

Python实现双向链表基本操作

def remove(self, item):
        '''删除元素'''
        if self.is_empty(): return 
        else:
            cur = self._head
            if cur.item == item:
                # 如果首节点的元素是要删除的元素
                if cur.next == None:
                    # 如果链表中只有一个节点
                    self._head = None
                else:
                    cur.next.prev = None
                    self._head = cur.next
                return
            while cur != None:
                if cur.item == item:
                    cur.prev.next = cur.next
                    cur.next.prev = cur.prev
                    break
                cur = cur.next

以上就是本文的全部内容,希望对大家的学习有所帮助。


Tags in this post...

Python 相关文章推荐
详解Python中内置的NotImplemented类型的用法
Mar 31 Python
Python实现登录人人网并抓取新鲜事的方法
May 11 Python
python之Socket网络编程详解
Sep 29 Python
Python面向对象class类属性及子类用法分析
Feb 02 Python
Selenium定位元素操作示例
Aug 10 Python
解决python ogr shp字段写入中文乱码的问题
Dec 31 Python
django url到views参数传递的实例
Jul 19 Python
python 通过文件夹导入包的操作
Jun 01 Python
Python压缩模块zipfile实现原理及用法解析
Aug 14 Python
如何使用Python调整图像大小
Sep 26 Python
如何利用python正则表达式匹配版本信息
Dec 09 Python
Python3+PyCharm+Django+Django REST framework配置与简单开发教程
Feb 16 Python
python实现双向链表原理
May 25 #Python
Python代码实现双链表
详解NumPy中的线性关系与数据修剪压缩
python实现双链表
May 25 #Python
Python实现双向链表
May 25 #Python
python区块链持久化和命令行接口实现简版
May 25 #Python
python区块链实现简版工作量证明
May 25 #Python
You might like
php学习笔记 PHP面向对象的程序设计
2011/06/13 PHP
PHP代码优化技巧小结
2015/09/29 PHP
Zend Framework动作助手Redirector用法实例详解
2016/03/05 PHP
PHP批量获取网页中所有固定种子链接的方法
2016/11/18 PHP
php常用日期时间函数实例小结
2019/07/04 PHP
Jquery工作常用实例 使用AJAX使网页进行异步更新
2011/07/26 Javascript
js实现幻灯片播放图片示例代码
2013/11/07 Javascript
jQuery中triggerHandler()方法用法实例
2015/01/19 Javascript
Backbone.js 0.9.2 源码注释中文翻译版
2015/06/25 Javascript
jquery拖拽效果完整实例(附demo源码下载)
2016/01/14 Javascript
Easyui的组合框的取值与赋值
2016/10/28 Javascript
Vue+axios 实现http拦截及路由拦截实例
2017/04/25 Javascript
express默认日志组件morgan的方法
2018/04/05 Javascript
深入理解Node内建模块和对象
2019/03/12 Javascript
Python中遍历字典过程中更改元素导致异常的解决方法
2016/05/12 Python
在java中如何定义一个抽象属性示例详解
2017/08/18 Python
Pandas实现数据类型转换的一些小技巧汇总
2018/05/07 Python
python的格式化输出(format,%)实例详解
2018/06/01 Python
Flask框架配置与调试操作示例
2018/07/23 Python
Python实现监控Nginx配置文件的不同并发送邮件报警功能示例
2019/02/26 Python
Python通过递归获取目录下指定文件代码实例
2019/11/07 Python
基于Python+QT的gui程序开发实现
2020/07/03 Python
Gap中国官网:美式休闲风服饰
2017/02/05 全球购物
美国领先的个性化礼品商城:Personalization Mall
2019/07/27 全球购物
全球领先的中国制造商品在线批发平台:DHgate
2020/01/28 全球购物
Michael Kors澳大利亚官网:世界知名的奢侈饰品和成衣设计师
2020/02/13 全球购物
化学教师自荐信范文
2013/12/28 职场文书
超市5.1促销活动
2014/01/15 职场文书
中秋晚会策划方案
2014/06/12 职场文书
解除劳动合同协议书范本2014
2014/09/25 职场文书
离职报告格式
2014/11/04 职场文书
解决pytorch-gpu 安装失败的记录
2021/05/24 Python
python关于集合的知识案例详解
2021/05/30 Python
Go语言基础切片的创建及初始化示例详解
2021/11/17 Golang
Python帮你解决手机qq微信内存占用太多问题
2022/02/15 Python
Java由浅入深通关抽象类与接口(上篇)
2022/04/26 Java/Android