返回顶部
首页 > 资讯 > 后端开发 > Python >python如何实现双链表
  • 382
分享到

python如何实现双链表

2023-06-30 16:06:43 382人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

本篇内容介绍了“python如何实现双链表”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!实现双链表需要注意的地方如何插入元素,考虑特殊情况:

本篇内容介绍了“python如何实现双链表”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

实现双链表需要注意的地方

如何插入元素,考虑特殊情况:头节点位置,尾节点位置;一般情况:中间位置
2、如何删除元素,考虑特殊情况:头结点位置,尾节点位置;一般情况:中间位置

代码实现

构造节点的类和链表类

class node:    def __init__(self, data):        self.data = data        self.next = None        self.previous = Noneclass DoubleLinkList:    '''双链表'''    def __init__(self, node=None):        self._head = node

以下方法均在链表类中实现

判断链表是否为空

def is_empty(self):        return self._head is None

输出链表的长度

def length(self):        count = 0        if self.is_empty():            return count        else:            current = self._head            while current is not None:                count += 1                current = current.next        return count

遍历链表

def travel(self):        current = self._head        while current is not None:            print("{0}".fORMat(current.data), end=" ")            current = current.next        print("")

头插法增加新元素

def add(self, item):        node = Node(item)        # 如果链表为空,让头指针指向当前节点        if self.is_empty():            self._head = node        # 注意插入的顺序,        else:            node.next = self._head            self._head.previous = node            self._head = node

尾插法增加新元素

def append(self, item):        node = Node(item)        # 如果链表为空,则直接让头指针指向该节点        if self.is_empty():            self._head = node        # 需要找到尾节点,然后让尾节点的与新的节点进行连接        else:            current = self._head            while current.next is not None:                current = current.next            current.next = node            node.previous = current

查找元素是否存在链表中

def search(self, item):        current = self._head        found = False        while current is not None and not found:            if current.data == item:                found = True            else:                current = current.next        return found

在某个位置中插入元素

def insert(self, item, pos):        # 特殊位置,在第一个位置的时候,头插法        if pos <= 0:            self.add(item)        # 在尾部的时候,使用尾插法        elif pos > self.length() - 1:            self.append(item)        # 中间位置        else:            node = Node(item)            current = self._head            count = 0            while count < pos - 1:                current = current.next                count += 1            # 找到了要插入位置的前驱之后,进行如下操作            node.previous = current            node.next = current.next            current.next.previous = node            current.next = node

python如何实现双链表

 # 换一个顺序也可以进行def insert2(self, item, pos):        if pos <= 0:            self.add(item)        elif pos > self.length() - 1:            self.append(item)        else:            node = Node(item)            current = self._head            count = 0            while count < pos:                current = current.next                count += 1            node.next = current            node.previous = current.previous            current.previous.next = node            current.previous = node

删除元素

def remove(self, item):        current = self._head        if self.is_empty():            return        elif current.data == item:            # 第一个节点就是目标节点,那么需要将下一个节点的前驱改为None 然后再将head指向下一个节点            current.next.previous = None            self._head = current.next        else:            # 找到要删除的元素节点            while current is not None and current.data != item:                current = current.next            if current is None:                print("not found {0}".format(item))            # 如果尾节点是目标节点,让前驱节点指向None            elif current.next is None:                current.previous.next = None            # 中间位置,因为是双链表,可以用前驱指针操作            else:                current.previous.next = current.next                current.next.previous = current.previous
# 第二种写法    def remove2(self, item):        """删除元素"""        if self.is_empty():            return        else:            cur = self._head            if cur.data == item:                # 如果首节点的元素即是要删除的元素                if cur.next is None:                    # 如果链表只有这一个节点                    self._head = None                else:                    # 将第二个节点的prev设置为None                    cur.next.prev = None                    # 将_head指向第二个节点                    self._head = cur.next                return            while cur is not None:                if cur.data == item:                    # 将cur的前一个节点的next指向cur的后一个节点                    cur.prev.next = cur.next                    # 将cur的后一个节点的prev指向cur的前一个节点                    cur.next.prev = cur.prev                    break                cur = cur.next

演示

my_list = DoubleLinkList()print("add操作")my_list.add(98)my_list.add(99)my_list.add(100)my_list.travel()print("{:#^50}".format(""))print("append操作")my_list.append(86)my_list.append(85)my_list.append(88)my_list.travel()print("{:#^50}".format(""))print("insert2操作")my_list.insert2(66, 3)my_list.insert2(77, 0)my_list.insert2(55, 10)my_list.travel()print("{:#^50}".format(""))print("insert操作")my_list.insert(90, 4)my_list.insert(123, 5)my_list.travel()print("{:#^50}".format(""))print("search操作")print(my_list.search(100))print(my_list.search(1998))print("{:#^50}".format(""))print("remove操作")my_list.remove(56)my_list.remove(123)my_list.remove(77)my_list.remove(55)my_list.travel()print("{:#^50}".format(""))print("remove2操作")my_list.travel()my_list.remove2(100)my_list.remove2(99)my_list.remove2(98)my_list.travel()

python如何实现双链表

Python如何实现双链表”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: python如何实现双链表

本文链接: https://lsjlt.com/news/330106.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python如何实现双链表
    本篇内容介绍了“python如何实现双链表”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!实现双链表需要注意的地方如何插入元素,考虑特殊情况:...
    99+
    2023-06-30
  • python实现双链表
    本文实例为大家分享了python实现双链表的具体代码,供大家参考,具体内容如下 实现双链表需要注意的地方 1、如何插入元素,考虑特殊情况:头节点位置,尾节点位置;一般情况:中间位置2...
    99+
    2024-04-02
  • Python实现双向链表
    之前写的单向链表和环形链表都只是单向的,只能单向遍历,不能根据后面的节点获取前面的节点,除非进行反转操作。 双向链表每个节点都有两个指针,这两个指针分别指向前后两个节点,这样就可以从...
    99+
    2024-04-02
  • Java如何实现双向链表
    本篇内容介绍了“Java如何实现双向链表”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、双向链表1 双向链表的每个节点组成包含节点数据,上...
    99+
    2023-06-30
  • Python代码实现双链表
    本文实例为大家分享了Python代码实现双链表的具体代码,供大家参考,具体内容如下 双链表的每个节点有两个指针: 一个指向后一个节点,另一个指向前一个节点 class Node(ob...
    99+
    2024-04-02
  • C语言如何实现双向链表和双向循环链表
    本文小编为大家详细介绍“C语言如何实现双向链表和双向循环链表”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言如何实现双向链表和双向循环链表”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。双向链表和双向循环链表...
    99+
    2023-06-16
  • 基于python实现双向链表
    目录一、构建链表节点二、实现链表类三、测试逻辑在一些面试或者力扣题中都要求用双向链表来实现,下面是基于python的双向链表实现。 一、构建链表节点 class Node:    ...
    99+
    2024-04-02
  • python实现双向链表原理
    双向链表 一种更复杂的链表是“双向链表”或“双面链表”。每个节点有两个链接:一个指向前一个节点,当此节点为第一个节点时,指向空值;而另...
    99+
    2024-04-02
  • Python 实现双向链表(图解)
    双向链表 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。 双向链表基本方法实现(Python) 1...
    99+
    2023-01-31
    双向 链表 Python
  • python双向链表怎么实现
    这篇文章主要介绍“python双向链表怎么实现”,在日常操作中,相信很多人在python双向链表怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python双向链表怎么实现”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-30
  • C语言如何实现双向链表
    本篇内容介绍了“C语言如何实现双向链表”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!双向链表的基本操作    ...
    99+
    2023-06-16
  • Java如何实现双向链表功能
    双向链表实现 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继...
    99+
    2024-04-02
  • 怎么用Python实现双向链表
    这篇文章主要介绍“怎么用Python实现双向链表”,在日常操作中,相信很多人在怎么用Python实现双向链表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python实现双向链表”的疑惑有所帮助!接下来...
    99+
    2023-06-30
  • Java实现双向链表
    本文实例为大家分享了Java实现双向链表的具体代码,供大家参考,具体内容如下 1、双向链表 1.1 双向链表的每个节点组成包含节点数据,上一个节点(pre),下一个节点(next) ...
    99+
    2024-04-02
  • Python实现双向链表基本操作
    双向链表的基本操作的实现,供大家参考,具体内容如下 在之前的博客中介绍了三种链表,分别是单链表、单向循环链表以及双向链表。本篇博客将用Python来实现双向链表的如下操作。(用到的工...
    99+
    2024-04-02
  • 怎么用Python代码实现双链表
    本文小编为大家详细介绍“怎么用Python代码实现双链表”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么用Python代码实现双链表”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。双链表的每个节点有两个指针: ...
    99+
    2023-06-30
  • python双向循环链表怎么实现
    本文小编为大家详细介绍“python双向循环链表怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“python双向循环链表怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。双向循环链表: 将所有的数据存...
    99+
    2023-06-30
  • Redis中List实现双链表
    目录概述:特征:(与LinkedList类似)List常见命令1.Lpush key element.....:向列表左侧插入一个或多个元素 2.LPOP key :移除并返回列表左侧的第一个元素,没有则返回n...
    99+
    2023-06-09
    Redis List双链表 Redis 双链表
  • Java实现双端链表LinkedList
    目录一、LinkedList 介绍二、LinkedList 使用一、LinkedList 介绍 1️⃣LinkedList 是 Java 集合框架中一个重要的实现,其底层采用的双向链...
    99+
    2024-04-02
  • C++如何实现带头双向循环链表
    这篇文章主要为大家展示了“C++如何实现带头双向循环链表”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C++如何实现带头双向循环链表”这篇文章吧。什么是带头双向循环链表什么是带头?双向?循环?(...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作