python单向链表的基本实现与使用方法【定义、遍历、添加、删除、查找等】

Python单向链表的基本实现与使用方法

单向链表是一种常见的数据结构,它由一个个节点构成,每个节点包含一个数据元素和一个指向下一个节点的指针。本文将介绍Python中单向链表的基本实现与使用方法,包括定义、遍历、添加、删除、查找等操作。

定义一个单向链表节点

首先,让我们定义一个单向链表节点类。每个节点由一个数据元素和一个指向下一个节点的指针组成,代码如下:

class Node:
    def __init__(self, data=None, next=None):
        self.data = data
        self.next = next

构建一个单向链表

构建一个单向链表,我们需要至少两个节点:头节点和尾节点。头节点是链表的开始处,尾节点是链表的结束处。我们可以定义一个链表类来维护头节点和尾节点,代码如下:

class LinkedList:
    def __init__(self):
        self.head = None
        self.tail = None

在构建链表时,头节点和尾节点都为空。下面我们来实现链表的基本功能。

添加一个节点

第一个节点添加到空链表时,它既是头节点,也是尾节点。接下来的节点都添加到尾节点之后。在单向链表中,我们只需要维护尾节点的指针。添加操作的代码如下:

    def add(self, data):
        if not self.head:
            self.head = Node(data=data)
            self.tail = self.head
        else:
            self.tail.next = Node(data=data)
            self.tail = self.tail.next

上述代码的执行步骤如下:

  1. 如果头节点为空,将新数据作为头节点,并将尾节点也指向它;
  2. 如果头节点不为空,将新节点追加到尾节点之后,并将尾节点指针指向它。

遍历链表

遍历链表通常是通过循环来实现的。我们从头节点开始遍历每个节点,直到到达尾节点。整个遍历过程的代码如下:

    def traverse(self):
        if not self.head:
            print("LinkedList is empty")
        else:
            node = self.head
            while node:
                print(node.data, end=" ")
                node = node.next

当链表为空时,输出“LinkedList is empty”,否则从头节点开始遍历每个节点,并输出它的值。

查找一个节点

查找一个节点,我们同样需要从头节点开始遍历。我们比较每个节点的值和查找目标的值是否相等,如果相等则返回这个节点。查找操作的代码如下:

    def find(self, target):
        if not self.head:
            return None
        node = self.head
        while node:
            if node.data == target:
                return node
            node = node.next
        return None

如果链表为空,直接返回None;否则从头节点开始遍历每个节点,比较其值和查找目标的值是否相等,如果相等返回该节点,否则返回None。

删除一个节点

删除一个节点,我们同样需要从头节点开始遍历。我们比较每个节点的值和删除目标的值是否相等,如果相等则删除这个节点。删除操作的代码如下:

    def delete(self, target):
        if not self.head:
            return None
        if self.head.data == target:
            self.head = self.head.next
            return
        node = self.head
        while node.next:
            if node.next.data == target:
                node.next = node.next.next
                if not node.next:
                    self.tail = node
                return
            node = node.next

如果链表为空,直接返回None;否则从头节点开始遍历每个节点,比较其值和删除目标的值是否相等,如果相等删除该节点,删除后更新尾节点的指针。

示例说明

下面通过两个例子来演示单向链表的基本操作。

例子1

构建一个链表,包含四个元素:1,3,5,7。

linked_list = LinkedList()
linked_list.add(1)
linked_list.add(3)
linked_list.add(5)
linked_list.add(7)
linked_list.traverse()

输出结果为:1 3 5 7。

例子2

构建一个链表,包含四个元素:2,4,6,8。

linked_list = LinkedList()
linked_list.add(2)
linked_list.add(4)
linked_list.add(6)
linked_list.add(8)
print(linked_list.find(4).data)
linked_list.delete(4)
linked_list.traverse()

输出结果为:4 2 4 6 8,2 6 8。注意:在操作过程中会有一行输出4,这是使用find方法查找节点4,并输出其值。然后使用delete方法删除节点4,最终输出遍历后的链表结果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python单向链表的基本实现与使用方法【定义、遍历、添加、删除、查找等】 - Python技术站

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

相关文章

  • u盘建议买多大内存 u盘什么牌子好

    U盘建议买多大内存 选择U盘的内存大小需要根据个人需求和使用场景来决定。以下是一些常见的内存大小建议: 8GB – 16GB:适合存储小型文件,如文档、图片和音乐。如果你只需要传输一些简单的文件,这个内存大小足够了。 32GB – 64GB:适合存储中等大小的文件,如高清视频和大型软件。如果你需要传输一些大型文件或者需要在U盘上存储一些常用的软件,这个内存大…

    other 2023年8月2日
    00
  • Android简单实现画图功能

    Android简单实现画图功能攻略 本攻略将详细介绍如何在Android应用中实现简单的画图功能。我们将使用Android Studio进行开发,并使用Java语言编写代码。 步骤一:创建新项目 首先,我们需要在Android Studio中创建一个新的项目。按照以下步骤进行操作: 打开Android Studio并点击“Start a new Androi…

    other 2023年8月25日
    00
  • Vcenter server 5.5安装部署

    Vcenter server 5.5安装部署 Vcenter server是一种基础架构管理工具,用于在虚拟化环境中管理和监控多个虚拟机。本文将介绍如何安装和部署Vcenter server 5.5。 1. 硬件和软件要求 在安装之前,请确保您的计算机系统符合Vcenter server 5.5的要求: 硬件要求 至少4个CPU内核 16GB RAM 10G…

    其他 2023年3月28日
    00
  • 利用opencv实现图片的配准/对齐

    以下是关于“利用opencv实现图片的配准/对齐”的完整攻略,包含两个示例。 背景 图像配准/对齐是指将多图像中的相同场景进行对齐,使得它们在像素级别上对应。在计算机视觉领域,图像配准/对齐是一个重要的问题。OpenCV是一个流行的计算机视觉库,它提供了许多图像配准/对齐的算法和工具。 安装 在使用OpenCV之前,我们需要先安装它。具体步骤如下: 安装Op…

    other 2023年5月9日
    00
  • unityhub破解

    UnityHub破解 UnityHub是一款非常好用的游戏引擎管理器,但是它的付费政策却让很多用户感到不便。如果您需要使用收费版本的Unity,就需要购买付费许可证,否则无法使用。但是,有些用户并不希望花费大量金钱购买付费许可证,因此需要破解UnityHub。 在此提醒各位,破解软件是不被允许的行为,且使用破解版UnityHub可能会带来各种潜在的安全问题,…

    其他 2023年3月29日
    00
  • oracle切换用户操作–or–sys用户密码忘记

    Oracle切换用户操作–OR–sys用户密码忘记 在Oracle数据库中,经常需要切换用户来执行相应的操作。同时,在管理Oracle数据库时,一旦忘记sys用户的密码,也需要进行相应的操作处理。本文将介绍如何切换Oracle用户以及如何处理忘记sys用户密码的情况。 1. 切换Oracle用户 Oracle支持非常方便的用户身份切换操作,主要有以下几种…

    其他 2023年3月29日
    00
  • Shell全局变量、局部变量与特殊变量的具体使用

    Shell全局变量、局部变量与特殊变量的具体使用 在Shell中,变量的使用非常重要,特别是各种变量的使用方式。本篇文章将详细讲解Shell中的全局变量、局部变量与特殊变量,并给出一些示例说明。 全局变量 全局变量在整个程序运行时都是可用的,可以被所有函数或命令使用。在Shell中,定义全局变量不需要显示声明,直接赋值即可。例如: #!/bin/bash g…

    other 2023年6月27日
    00
  • Windows PowerShell 微软官方解释

    Windows PowerShell 微软官方解释 Windows PowerShell 是一种微软的命令行 shell 和脚本语言,它旨在方便 IT 专业人员配置和管理 Windows 操作系统和应用程序的任务。Windows PowerShell 构建于 .NET Framework 之上,因此它能够利用 .NET 框架,从而提供丰富的 API 和功能。…

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