python链表的基础概念和基础用法详解

yizhihongxing

Python链表的基础概念和基础用法详解

链表是一种数据结构,它由节点组成,每个节点包含数据和指向下一个节点的引用。链表的优点是在插入/删除元素方面比数组更快,但随机访问元素的时间比较慢。

基本概念

链表的基本组成是节点,每个节点包括数据和指向下一个节点的引用。下面是一个简单的链表节点类:

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

在上面的代码中,我们定义了一个节点类,它有一个包含数据的属性 data 和一个指向下一个节点的属性 next ,其中,默认值是 None

链表头是第一个节点。如果链表为空,则头为 None。下面是一个简单的链表类:

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

在上面的代码中,我们定义了一个链表类,它有一个包含头节点的属性 head,默认为 None

基础用法

在链表中添加节点

def add_node(self, data):
    if self.head is None:
        self.head = Node(data)
    else:
        current_node = self.head
        while current_node.next is not None:
            current_node = current_node.next
        current_node.next = Node(data)

在上面的代码中, add_node 方法接受一个数据参数。如果链表为空,则可以将新节点作为头节点添加到链表中。否则,它会遍历链表并将新节点添加到最后一个节点的 next 属性中。

从链表中删除节点

def delete_node(self, data):
    if self.head is None:
        return
    if self.head.data == data:
        self.head = self.head.next
        return
    current_node = self.head
    while current_node.next is not None:
        if current_node.next.data == data:
            current_node.next = current_node.next.next
            return
        current_node = current_node.next

在上面的代码中, delete_node 方法接受一个数据参数。如果链表为空,则不执行任何操作。如果要删除的节点是头节点,则将头节点更新为下一个节点。否则,它将遍历链表并删除包含指定数据的节点。

示例说明

示例1

# 创建一个链表
linked_list = LinkedList()
# 添加节点到链表
linked_list.add_node(1)
linked_list.add_node(2)
linked_list.add_node(3)

# 输出链表中的所有节点
current_node = linked_list.head
while current_node is not None:
    print(current_node.data)
    current_node = current_node.next

# 删除节点
linked_list.delete_node(2)

# 再次输出链表中的所有节点
current_node = linked_list.head
while current_node is not None:
    print(current_node.data)
    current_node = current_node.next

在上面的代码中,我们创建了一个包含三个节点的链表,然后输出了每个节点的值。然后,我们从链表中删除一个节点,并重新输出链表中的所有节点。

输出结果为:

1
2
3
1
3

示例2

# 创建一个链表
linked_list = LinkedList()

# 输出链表中的所有节点
current_node = linked_list.head
while current_node is not None:
    print(current_node.data)
    current_node = current_node.next

# 删除节点
linked_list.delete_node(2)

# 再次输出链表中的所有节点
current_node = linked_list.head
while current_node is not None:
    print(current_node.data)
    current_node = current_node.next

在上面的代码中,我们只是尝试输出空链表中的所有节点,并且删除一个不存在的节点。

输出结果为:


注意,第一个循环中没有输出任何内容,因为链表为空。而在第二个循环中,由于链表为空,因此没有输出任何内容。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python链表的基础概念和基础用法详解 - Python技术站

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

相关文章

  • 前端性能优化成神之路–ssr(服务端渲染)

    前端性能优化成神之路–ssr(服务端渲染) 前端性能优化一直是前端开发中的重要话题,其中服务端渲染(SSR)是一种优化前端性能的有效方式。本攻略将详细讲解SSR的基本概念、使用方法和示例说明。 SSR的基本概念 服务端渲染(SSR)是指在服务器端将动态页面生成HTML字符串,然后将其发送到客户端进行展示。传统的客户端渲染(CSR)相比,SSR可以高页面的加…

    other 2023年5月9日
    00
  • Ubuntu中实现Docker内安装jenkins+jenkins远程触发

    我将为您提供 Ubuntu 中实现 Docker 内安装 Jenkins + Jenkins 远程触发的完整攻略,包括 Docker 的安装、Jenkins 的安装和配置、Jenkins 远程触发的设置,同时提供两个示例说明。 Docker 的安装 在 Ubuntu 中,可以使用以下命令安装 Docker: sudo apt-get update sudo …

    other 2023年5月5日
    00
  • Android开发中Launcher3常见默认配置修改方法总结

    Android开发中Launcher3常见默认配置修改方法总结 Launcher3是Android系统中的默认桌面应用程序,它提供了用户界面和交互方式来管理设备上的应用程序和小部件。在Android开发中,我们可能需要修改Launcher3的默认配置以满足特定需求。本攻略将详细介绍如何修改Launcher3的常见默认配置。 步骤一:获取Launcher3源代…

    other 2023年9月6日
    00
  • Go底层channel实现原理及示例详解

    Go底层channel实现原理及示例详解 介绍 Go是一门并发编程语言,其核心思想通过Goroutine和Channel实现轻量级并发。本文将详细讲解Go底层Channel实现原理,并提供两个示例说明。 Channel概述 Go中的Channel是一种实现同步、通信和控制Goroutine的途径,类似于Unix中的管道。它可以让不同的Goroutine之间进…

    other 2023年6月27日
    00
  • .html 、.htm 、 .shtml 以及 .shtm 四种扩展名的文件区别

    文件扩展名的区别 在Web开发中,常见的文件扩展名包括.html、.htm、.shtml和.shtm。尽管它们在某些方面相似,但它们在处理方式和功能上存在一些区别。 1. .html和.htm .html和.htm是最常见的网页文件扩展名,它们用于表示HTML(Hypertext Markup Language)文件。这些文件包含网页的结构和内容,并由Web…

    other 2023年8月5日
    00
  • 5分钟搭建一个WebRTC视频聊天

    为了给你提供更详细的信息,我将按步骤列出完整的WebRTC视频聊天搭建攻略,包括示例。希望对你有所帮助。 步骤1:安装Node.js和npm Node.js是一种基于Chrome V8 JavaScript引擎的JavaScript运行环境,用于构建服务器端应用程序。npm是一个包管理器,用于在Node.js软件包生态系统中安装和管理包。 在开始之前,请确保…

    other 2023年6月27日
    00
  • Python类定义和类继承详解

    Python类定义和类继承详解 Python类的定义 在Python中,对象是由类来创建的。类是一个抽象的概念,用于表示一类对象的属性和行为。 语法格式 class ClassName: ”’类的帮助信息”’ class_suite #类体 其中,ClassName表示类的名称,类体class_suite包含了类的方法、属性和内置方法等。 类的实例化 类…

    other 2023年6月27日
    00
  • apache安装与配置

    以下是详细讲解“Apache安装与配置的完整攻略,过程中至少包含两条示例说明”的标准Markdown格式文本: Apache安装与配置攻略 Apache是一种常用的Web服务器软件,用于搭建Web服务器和托管网站。本攻略将介绍Apache的安装与配置步骤。 步骤一:安装Apache 可以以下命令在Ubuntu系统中安装Apache: sudo apt-get…

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