python中的单向链表实现

实现链表需要定义节点类,节点类包含每个节点的值和指向下一个节点的指针。链表类需要有一个指向链表头节点的指针。

定义节点类

节点类包含__init__方法和__str__方法。

__init__方法用于初始化节点的值和指针。

__str__方法用于打印节点。

class Node:
    def __init__(self, value):
        """
        初始化节点
        """
        self.value = value
        self.next = None

    def __str__(self):
        """
        打印节点
        """
        return f'{self.value}'

定义链表类

链表类包含__init__方法和__str__方法。

__init__方法初始化链表头节点。

__str__方法遍历整个链表并打印每个节点的值。

class LinkedList:
    def __init__(self):
        """
        初始化链表,设置链表头节点为None
        """
        self.head = None

    def __str__(self):
        """
        遍历链表并打印每个节点的值
        """
        lst = []
        current = self.head
        while current:
            lst.append(str(current))
            current = current.next
        return '->'.join(lst)

添加节点

可以向链表中添加节点。添加节点时需要判断链表是否为空。如果链表为空,需要将新节点设置为链表头节点;如果链表非空,需要找到链表尾节点并将其指向新节点。

class LinkedList:
    # ...

    def add(self, value):
        """
        向链表中添加节点
        """
        # 链表为空,设置链表头节点
        if not self.head:
            self.head = Node(value)
            return

        # 链表非空,找到链表尾节点并将其指向新节点
        current = self.head
        while current.next:
            current = current.next
        current.next = Node(value)

删除节点

可以从链表中删除节点。删除节点时需要判断链表是否为空。如果链表为空,无法删除节点;如果链表非空,需要找到要删除节点的前一个节点并将其指向要删除节点的下一个节点。

class LinkedList:
    # ...

    def remove(self, value):
        """
        从链表中删除节点
        """
        # 链表为空,无法删除节点
        if not self.head:
            return

        # 要删除的是链表头节点
        if self.head.value == value:
            self.head = self.head.next
            return

        # 链表非空,找到要删除节点的前一个节点并将其指向要删除节点的下一个节点
        current = self.head
        while current.next and current.next.value != value:
            current = current.next
        if current.next:
            current.next = current.next.next

示例1:向链表中添加节点

linked_list = LinkedList()
linked_list.add(1)
linked_list.add(2)
linked_list.add(3)
linked_list.add(4)
print(linked_list)

输出:

1->2->3->4

示例2:从链表中删除节点

linked_list = LinkedList()
linked_list.add(1)
linked_list.add(2)
linked_list.add(3)
linked_list.add(4)
linked_list.remove(3)
print(linked_list)

输出:

1->2->4

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python中的单向链表实现 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Android实战教程第七篇之如何在内存中存储用户名和密码

    下面是Android实战教程第七篇之如何在内存中存储用户名和密码的完整攻略。 1、背景介绍 在移动应用中,通常需要在客户端存储用户信息,例如用户名和密码。而这些信息应该是安全的,不能被其他人轻易地获取到。本文将介绍如何在安卓应用中,使用内存方式存储用户名和密码,保证信息的安全性。 2、技术实现 2.1、内存存储数据 在安卓应用中,内存存储是最快的存储方式。A…

    other 2023年6月27日
    00
  • 如何导出python安装的所有模块名称和版本号到文件中

    如何导出Python安装的所有模块名称和版本号到文件中 如果你想要导出Python安装的所有模块的名称和版本号到一个文件中,可以按照以下步骤进行操作: 步骤 1:安装 pipreqs pipreqs 是一个用于生成项目所需模块清单的工具。首先,你需要安装 pipreqs。在命令行中运行以下命令: pip install pipreqs 步骤 2:生成模块清单…

    other 2023年8月2日
    00
  • python字符串不可变数据类型

    Python字符串不可变数据类型攻略 在Python中,字符串是不可变的数据类型,这意味着一旦创建了一个字符串对象,就不能修改它的值。下面是关于Python字符串不可变性的详细解释和示例说明。 什么是不可变数据类型? 不可变数据类型是指一旦创建后,其值就不能被修改的数据类型。在Python中,字符串是不可变的,这意味着不能直接修改字符串的字符。 字符串不可变…

    other 2023年8月19日
    00
  • Java实现批量修改文件名和重命名的方法

    下面是详细讲解“Java实现批量修改文件名和重命名的方法”的完整攻略,包含两条示例说明。 1. 引言 在我们日常的开发工作中,有时候需要对文件进行批量修改文件名或重命名,手动修改文件名是一项较为耗时、繁琐的工作,因此,使用Java程序来实现批量修改文件名和重命名是一项非常实用的技能。 2. 实现方法 Java中实现批量修改文件名和重命名的主要步骤包括:获取指…

    other 2023年6月26日
    00
  • 电脑一直在bios界面无法开机怎么办 电脑开机无限进入bios的解决方法

    电脑一直在 BIOS 界面无法开机怎么办 当你打开电脑时,如果一直停留在 BIOS 界面,而不能进入操作系统,这可能会导致很多麻烦。但是这种问题通常可以通过以下几种方法解决。 检查硬件设备 首先,你应该检查你的电脑的硬件设备是否正常。一些硬件故障可能会导致电脑无法正常启动。你可以开始检查以下硬件设备: 电源供应 检查电源是否正常工作,并且电脑是否正常接收电源…

    other 2023年6月27日
    00
  • IOC 容器启动和Bean实例化两个阶段详解

    当我们启动一个Spring应用程序时,Spring容器将会进行两个主要的阶段:IOC容器启动和Bean实例化。下面将对这两个阶段进行详细解析。 IOC容器启动 IOC容器启动是指在应用程序启动时Spring容器进行的第一个阶段。在此阶段,Spring 容器会执行以下操作: 加载Spring的配置文件。 读取配置文件中的Bean定义。 通过反射机制实例化Bea…

    other 2023年6月27日
    00
  • 使用CSS计数器美化数字有序列表的实现方法

    使用CSS计数器可以美化数字有序列表的样式。下面是实现方法的详细攻略: 创建有序列表(<ol>)元素,并为其添加一个自定义的类名,例如custom-list。 <ol class=\"custom-list\"> <li>列表项1</li> <li>列表项2</li>…

    other 2023年7月28日
    00
  • python魔法方法-自定义序列详解

    python魔法方法-自定义序列详解 Python中的“魔法方法”允许开发者在自定义类型时覆盖Python的内部方法,从而扩展自己的类型。自定义序列是Python中使用魔法方法的常见应用之一。 基本序列协议 在Python中,序列是指能够按顺序访问元素的对象。标准库中的列表(list)、元组(tuple)、字符串(str)、字节数组(bytes array)…

    other 2023年6月25日
    00
合作推广
合作推广
分享本页
返回顶部