Python实现单向链表

Python实现单向链表

单向链表是一种常见的数据结构,它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点指针。本文将介绍如何使用Python实现单向链表。

实现步骤

步骤一:定义节点类

首先,我们需要定义一个节点类,用于表示单向链表中的每个节点。节点类包含两个属性:data和next。data表示节点中存储的数据,next表示指向下一个节点的指针。下面是一个示例,演示了如何定义节点类:

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

在这个例子中,我们定义了一个节点类Node,包含两个属性:data和next。其中,data表示节点中存储的数据,next表示指向下一个节点的指针。我们使用构造函数__init__()来初始化节点对象。

步骤二:定义单链表类

接下来,我们需要定义一个单向链表类,用于表示整个单向链表。单向链表类包含一个头head,用于指向链表中的第一个节点。下面是一个示例,演示了如何定义单向链表类:

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

在这个例子中,我们定义了一个单向链表类,包含一个头节点head。我们使用构造函数__init__()来初始化单向链表对象。

步骤三:实现单向链表的基本操作

在定义了节点类和单向链表类之后,我们需要实现单向链的基本操作,包括插节点、删除节点、查找节点等。下面是一个示例演示了如何实现单向链表的基本操作:

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

    # 在链表头部插入节点
    def insert_at_beginning(self, data):
        new_node = Node(data)
        new_node.next = self.head
        self.head = new_node

    # 在链表尾部插入节点
    def insert_at_end(self, data):
        new_node = Node(data)
        if self.head is None:
            self.head = new_node
            return
        last_node = self.head
        while last_node.next:
            last_node = last_node.next
        last_node.next = new_node

    # 删除节点
    def delete_node(self, key):
        current_node = self.head
        if current_node and current_node.data == key:
            self.head = current_node.next
            current_node = None
            return
        prev_node = None
        while current_node and current_node.data != key:
            prev_node = current_node
            current_node = current_node.next
        if current_node is None:
            return
        prev_node.next = current_node.next
        current_node = None

    # 查找节点
    def search_node(self, key):
        current_node = self.head
        while current_node:
            if current_node.data == key:
                return True
            current_node = current_node.next
        return False

    # 输出链表
    def print_list(self):
        current_node = self.head
        while current_node:
            print(current_node.data)
            current_node = current_node.next

在这个例子中,我们实现了单向链表的基本操作,包括在链表头部插节点在链表尾部插入节点、删除节点、查找节点和输出链表。我们使用insert_at_beginning()方法在链表头部插入节点,使用insert_at_end()方法在链表尾部插入节点,使用delete_node()方法删除节点,使用search_node()方法查找节点,使用print_list()方法输出链表。

示例

示例一:创建单向链表并输出

# 创建单向链表并输出
linked_list = LinkedList()
linked_list.insert_at_beginning(1)
linked_list.insert_at_end(2)
linked_list.insert_at_end(3)
linked_list.insert_at_end(4)
linked_list.print_list()

在这个例子中,我们创建了一个单向链表,并在链表中插入了四个节点。然后,我们使用print_list()方法输出链表。输出结果为:

1
2
3
4

从输出结果可以看出我们成功地创建了单向链表并输出。

示例二:删除单向链表中的节点

# 删除单向链表中的节点
linked_list = LinkedList()
linked_list.insert_at_beginning(1)
linked_list.insert_at_end(2)
linked_list.insert_at_end(3)
linked_list.insert_at_end(4)
linked_list.delete_node(3)
linked_list.print_list()

在这个例子中,我们创建了一个单向链表,并在链表中插入了四个节点。然后,我们使用delete_node()方法删除了3,并使用print_list()方法输出链表。输出结果为:

1
2
4

从输出结果可以看出,我们成功地删除了单向链表中的节点。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现单向链表 - Python技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • 简单掌握Python中glob模块查找文件路径的用法

    当我们需要在Python代码中查找文件路径时,可以使用glob模块来进行快速的文件匹配和遍历。下面是详细的攻略: 1. 简介 glob模块提供了一种简单的文件名模式匹配方法,可以使用通配符 * 和 ? 来匹配文件名。此外,可以使用 [] 来匹配范围内的字符。这些特殊字符在正则表达式中也有类似的用法。 2. 安装和导入 glob模块是Python自带的标准库,…

    python 2023年6月5日
    00
  • 解决jupyter notebook显示不全出现框框或者乱码问题

    针对“解决jupyter notebook显示不全出现框框或者乱码问题”这个问题,可以有以下几个步骤: 步骤一:查看当前环境字符集编码 在Jupyter Notebook中,可以使用以下代码获取当前环境的字符集编码: import sys print(sys.getdefaultencoding()) 运行后如果输出结果为utf-8则表明当前环境为UTF-8…

    python 2023年5月20日
    00
  • Python中的CURL PycURL使用例子

    CURL是一个用于传输数据的工具和库,支持多种协议,包括HTTP、FTP、SMTP等。PycURL是一个Python库,它提供了对CURL的Python绑定,可以方便地使用CURL进行网络通信。本文将详细讲解如何使用Python中的CURLPycURL库,包括如何发送HTTP请求、如何设置请求头、如何处理响应等。 安装PycURL 在使用PycURL之前,我…

    python 2023年5月15日
    00
  • Python星号*与**用法分析

    当使用Python编程时,星号和通常用于处理参数,unpacking元素和编写可变数量的函数参数。接下来,我将详细讲解Python星号与**用法分析以及在不同场景下的使用示例。 使用星号*处理参数 常规参数和可变数量的参数同时存在 在Python中,可以将星号用于处理常规参数和可变数量的参数。下面是一个例子,其中a是常规参数,b是可变数量的参数,且带有星号的…

    python 2023年5月13日
    00
  • Python命令行参数解析包argparse的使用详解

    Python命令行参数解析包argparse的使用详解 在Python中,argparse是一个用于解析命令行参数和选项的标准模块。它可以帮助我们轻松地编写具有复杂参数的命令行工具。本文将详细讲解argparse的使用方法和示例。 基本用法 首先,我们需要导入argparse模块,并创建一个ArgumentParser对象。然后,我们可以使用add_argu…

    python 2023年5月15日
    00
  • 如何使用 Python 驱动程序加速将 execute_async 插入 Cassandra

    【问题标题】:How to speed up execute_async insertion to Cassandra using the Python Driver如何使用 Python 驱动程序加速将 execute_async 插入 Cassandra 【发布时间】:2023-04-07 15:37:01 【问题描述】: 我正在尝试使用 python …

    Python开发 2023年4月8日
    00
  • Python任意字符串转16, 32, 64进制的方法

    以下是Python任意字符串转16进制、32进制、64进制的方法攻略: 将字符串转为16进制 可以使用Python的内置模块binascii中的b2a_hex()函数将字符串转成16进制。具体实现过程如下: import binascii # 将字符串转化为16进制 s = ‘hello world’ hex_str = binascii.b2a_hex(s…

    python 2023年5月20日
    00
  • 重新排序矩阵元素以反映朴素python中的列和行聚类

    【问题标题】:Reordering matrix elements to reflect column and row clustering in naiive python重新排序矩阵元素以反映朴素python中的列和行聚类 【发布时间】:2023-04-06 07:11:01 【问题描述】: 我正在寻找一种在矩阵行和列上分别执行聚类的方法,重新排序矩阵中…

    Python开发 2023年4月7日
    00
合作推广
合作推广
分享本页
返回顶部