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日

相关文章

  • Flutter之 ListView组件使用示例详解

    下面我就详细讲解一下“Flutter之 ListView组件使用示例详解”的完整攻略。 简介 ListView是Flutter中非常重要的控件之一,可以实现列表的展示,并且支持添加滚动等操作。在本篇文章中,我们将深入讲解ListView的使用方法和注意事项。 ListView的基本使用 下面是一个最简单的ListView控件的示例代码: ListView( …

    other 2023年6月26日
    00
  • 调度器(scheduler)

    调度器(Scheduler) 调度器是许多计算机程序中的关键组件,它可以帮助程序管理任务并控制它们的执行时间。在网站开发中,调度器通常被用来执行定时任务,例如定时备份数据库或定时发送电子邮件。 如何工作 调度器可以理解为一个时钟或计时器。它会按照预定义的时间间隔(例如每隔一天或每隔十分钟)触发一个事件。该事件通常是一个函数或一个任务,可以执行特定的操作。调度…

    其他 2023年3月29日
    00
  • VUE实现分布式医疗挂号系统预约挂号首页步骤详情

    针对这个问题,我会给出以下详细的解答: 1. 背景与需求 在实现分布式医疗挂号系统时,预约挂号首页是至关重要的一步。用户通过首页进行预约挂号,需要浏览医院信息、选择科室、医生以及挂号时间等。因此,预约挂号首页需要实现如下功能: 显示医院信息,包括医院名称、地址、电话等。 显示可挂号的科室信息,包括科室名称、医生信息等。 支持根据时间、科室、医生等条件进行挂号…

    other 2023年6月26日
    00
  • JavaScript 正则表达式备忘单实例代码

    JavaScript 正则表达式备忘单实例代码攻略 正则表达式是一种强大的工具,用于在字符串中匹配和操作文本模式。在 JavaScript 中,我们可以使用正则表达式来进行字符串匹配、替换、提取等操作。下面是一个详细的攻略,包含了一些常见的正则表达式示例代码。 1. 创建正则表达式 在 JavaScript 中,我们可以使用两种方式来创建正则表达式:使用字面…

    other 2023年8月18日
    00
  • 如何创建word文档?创建新word文档五大方法

    创建Word文档是我们日常办公工作中经常要用到的基本操作。下面我们来介绍创建Word文档的五种常见方法: 方法一:使用 Word 软件创建新文档 打开 Word 软件,可以看到欢迎界面。 选择“空白文档”选项,创建一个新的空白文档。 在新的 Word 文档中,输入内容并进行排版,格式化文本等操作。 保存文件,可以选择不同的存储位置和格式,如.docx、.do…

    other 2023年6月27日
    00
  • 网线ip总是冲突怎么办 网线连上后提示IP地址冲突的解决方法

    网线IP总是冲突的解决方法攻略 当网线连接上后提示IP地址冲突时,这可能是因为多个设备在同一网络上使用了相同的IP地址。为了解决这个问题,你可以采取以下步骤: 步骤一:确认IP地址冲突 首先,你需要确认是否真的存在IP地址冲突。你可以按照以下步骤进行确认: 打开命令提示符(Windows)或终端(Mac和Linux)。 输入命令 ipconfig(Windo…

    other 2023年7月30日
    00
  • 易语言一维数组用法详解

    易语言一维数组用法详解 在易语言中,数组是一组相同类型的数据元素组成的集合,并在内存中按照一定的存储方式连续存储。易语言中数组的声明方式非常简单,本文将详细介绍易语言一维数组的用法及示例。 声明数组 在声明数组时需要指定该数组中元素的类型及数组的大小,例如下面的代码声明了一个包含5个整型元素的一维数组: Dim arr(4) As Integer 上述代码中…

    other 2023年6月25日
    00
  • iOS中block变量捕获原理详析

    iOS中block变量捕获原理详析 在iOS开发中,block是一种闭包语法,可以用于封装一段代码,并在需要的时候执行。block可以捕获外部变量,使得在block内部可以访问和修改这些变量。本文将详细讲解iOS中block变量捕获的原理。 1. block的定义和使用 在Objective-C中,block可以通过^符号来定义,例如: int (^mult…

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