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

yizhihongxing

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日

相关文章

  • Python使用Selenium WebDriver的入门介绍及安装教程(最新推荐)

    以下是“Python使用Selenium WebDriver的入门介绍及安装教程(最新推荐)”的完整攻略: 简介 Selenium是一个自动化测试框架,最初是为Web应用程序测试而创建的。 Selenium WebDriver是Selenium的一个分支,它提供了一组API用于自动化操作Web浏览器。 使用Python编写Selenium脚本可以自动完成We…

    other 2023年6月27日
    00
  • fcrackzip官网

    当然,我很乐意为您提供有关“fcrackzip官网”的完整攻略。以下是详细的步骤和两个示例: 1. 什么是fcrackzip? fcrackzip是一个用于破解加密的ZIP文件的命令行工具。它可以使用暴力破解或字典攻击的方式来破解ZIP文件的密码。 2. fcrackzip官网 fcrackzip的官方网站是http://oldhome.schmorp.de…

    other 2023年5月6日
    00
  • 微信小程序block的使用教程

    以下是关于“微信小程序block的使用教程”的完整攻略,包括基本概念、语法、示例说明和注意事项。 基本概念 微信小程序中,block是一种用于控制流程的标签。它可以用于循环、条件判断等场景,可以让代码更加简洁、易读。 语法 block的语法如下: <block wx:for="{{array}}"> <view>{…

    other 2023年5月7日
    00
  • 常用Raspberry Pi周边传感器的使用教程

    常用Raspberry Pi周边传感器的使用教程 Raspberry Pi是一款非常流行的小型电脑,它的存在使得开发者们能够便捷地搭建各种自己的小型项目。其中,传感器作为Raspberry Pi的常见周边设备,能够以其简单、易用的特性为我们的项目提供全面的控制、监测、实时数据记录等功能。本篇文章将会介绍一些常用的Raspberry Pi周边传感器,如何使用它…

    其他 2023年3月28日
    00
  • Excel2016打开文档时提示内存或磁盘空间不足的两种解决方法

    Excel2016打开文档时提示内存或磁盘空间不足的两种解决方法 当使用Excel 2016打开文档时,有时会遇到内存或磁盘空间不足的提示。这可能是由于文档过大或计算机资源不足所导致的。下面是两种解决方法,可以帮助您解决这个问题。 方法一:增加内存或磁盘空间 增加内存:如果您的计算机内存不足,可以考虑增加内存以提高性能。以下是一些示例说明: 示例1:升级内存…

    other 2023年8月1日
    00
  • python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)

    下面是完整的攻略。 概述 UDP是一种面向无连接的协议,它与TCP类似,都属于运输层协议,但与TCP不同的是,UDP主要面向无连接、高效、快速的数据传输。在网络游戏、视频、音频流媒体等领域中,UDP被广泛应用,因为这些应用对传输速度的要求较高,对数据丢失的容忍度也较高。 本文将介绍如何使用Python进行UDP通信。我们将通过两个示例来说明UDP通信的基本流…

    other 2023年6月27日
    00
  • 各种文件后缀名与打开方式大全

    各种文件后缀名与打开方式大全 文字类文档 .txt:使用任何文本编辑器可以打开。例如:Windows 上的记事本、Mac 上的 TextEdit、Linux 上的 Vim、Nano 等。 .doc/.docx:需要使用 Microsoft Word 打开,也可以使用谷歌文档等第三方应用程序打开。 .pdf:需要使用 Adobe Reader 或类似的 PDF…

    other 2023年6月26日
    00
  • PHP的变量类型和作用域详解

    PHP的变量类型和作用域详解 PHP是一种动态类型的编程语言,它允许在运行时根据需要改变变量的类型。在PHP中,变量的类型和作用域是非常重要的概念。本攻略将详细讲解PHP的变量类型和作用域。 变量类型 PHP支持多种变量类型,包括以下几种常见的类型: 整型(Integer):用于表示整数值,例如$num = 10;。 浮点型(Float):用于表示带有小数点…

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