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

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日

相关文章

  • 用户体验:五个最常见的产品设计误区 

    用户体验:五个最常见的产品设计误区 用户体验(User Experience, UX)在产品设计中非常重要,好的用户体验可以提高用户使用的满意度,从而提升产品的市场竞争力。但是,产品设计过程中常会出现一些常见的误区,下面是五个最常见的产品设计误区以及如何避免它们的攻略: 误区一:臆测用户需求 问题描述: 很多设计师会根据自己的经验和观察来臆测用户的需求,但事…

    other 2023年6月26日
    00
  • template标签介绍和使用

    template标签是Django中用于控制网页模板渲染的重要标签,其作用是定义前端的HTML页面,包含HTML结构和样式表样式等信息。在Django框架中,我们可以使用template标签来实现对HTML页面中的变量、循环和条件判断等操作,以使页面的展示达到更灵活的效果。 1. 使用 1.1 定义模板 在Django的APP应用目录中,我们可以创建一个名为…

    其他 2023年4月16日
    00
  • Spring中bean的初始化和销毁几种实现方式详解

    下面我将详细讲解Spring中bean的初始化和销毁几种实现方式。 一、Bean初始化 1. 实现InitializingBean接口 实现InitializingBean接口并覆盖afterPropertiesSet()方法,该方法会在所有的属性被设置之后,初始化bean之前调用。 public class MyBean implements Initia…

    other 2023年6月20日
    00
  • JDK7.0 环境变量配置图文教程

    下面是“JDK7.0 环境变量配置图文教程”的完整攻略。 简介 在进行 Java 开发时,需要先安装 JDK(Java Development Kit)。但是安装 JDK 后还需要配置环境变量才能在命令行上使用 javac 和 java 命令。本教程将分享 JDK7.0 环境变量配置的图文教程。 步骤 1. 下载并安装 JDK 首先,从 Oracle 官网下…

    other 2023年6月27日
    00
  • 关于vim:在vi中执行查找替换确认时如何返回上一步?

    关于vim:在vi中执行查找替换确认时如何返回上一步? 在vim中执行查找替换确认时,如果需要返回一步,可以使用u命令撤销上一步操作。下面是详细的攻略和两个示例说明: 步骤 执行查找替换命令:在vim中,可以使用:%s/old/new/gc命令执行查找替换操作。其中,%表示对整个文件进行操作,s表示替换操作,old表示要替换字符串,new表示替换后的字符串,…

    other 2023年5月7日
    00
  • iOS如何定义名为任意的变量详解

    当涉及到iOS中如何定义名为任意的变量时,以下是一个完整的攻略,其中包含两个示例说明。 … 变量定义 在iOS开发中,可以使用以下语法来定义一个变量: var variableName: DataType var关键字用于声明一个变量。 variableName是你给变量起的名字。 DataType是变量的数据类型。 以下是一个示例,展示了如何定义一个整…

    other 2023年8月10日
    00
  • 发现Linux中IP地址冲突的方法

    发现Linux中IP地址冲突的方法攻略 在Linux系统中,发现IP地址冲突是一个重要的任务,因为IP地址冲突可能导致网络连接问题和通信故障。下面是一份详细的攻略,介绍了如何在Linux中发现IP地址冲突的方法。 方法一:使用arping命令 打开终端,以root用户身份登录。 使用以下命令安装arping工具(如果尚未安装): sudo apt-get i…

    other 2023年7月30日
    00
  • 在IDEA使用中directory和package的操作

    当在IntelliJ IDEA中使用directory和package时,可以按照以下步骤进行操作: 创建一个新的directory(目录): 在项目视图中,右键单击想要创建目录的位置。 选择“New”(新建)并选择“Directory”(目录)。 输入目录的名称并按下Enter键。 创建一个新的package(包): 在项目视图中,右键单击想要创建包的目录…

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