python单链表实现代码实例

yizhihongxing

下面是python单链表实现代码实例的完整攻略:

什么是单链表

单链表是数据结构中最简单的一种形式,每个节点包含两个信息:当前节点的值(value)和指向下一个节点的引用(next)。单链表的第一个节点被称为头节点,而最后一个节点被称为尾节点。

单链表的实现

在Python中,可以通过定义一个链表类来实现单链表。该类至少应该具有以下方法:

  • __init__(): 初始化链表。
  • is_empty(): 返回链表是否为空。
  • length(): 返回链表的长度。
  • travel(): 遍历链表并打印每个节点。
  • add(value): 在链表头部添加一个节点。
  • append(value): 在链表尾部添加一个节点。
  • insert(index, value): 在指定位置插入一个节点。
  • remove(value): 删除链表中第一个值为value的节点。
  • pop(): 删除链表中最后一个节点,并返回其值。

其中,__init__()方法应该初始化一个头节点,指向下一个节点的引用为None。

下面是一个Python单链表的实现代码示例:

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

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

    def is_empty(self):
        return self.head.next == None

    def length(self):
        count = 0
        current = self.head.next
        while current != None:
            count += 1
            current = current.next
        return count

    def travel(self):
        current = self.head.next
        while current != None:
            print(current.value, end=' ')
            current = current.next
        print()

    def add(self, value):
        node = Node(value)
        node.next = self.head.next
        self.head.next = node

    def append(self, value):
        node = Node(value)
        current = self.head
        while current.next != None:
            current = current.next
        current.next = node

    def insert(self, index, value):
        if index <= 0:
            self.add(value)
        elif index >= self.length():
            self.append(value)
        else:
            node = Node(value)
            current = self.head.next
            count = 0
            while count < index - 1:
                count += 1
                current = current.next
            node.next = current.next
            current.next = node

    def remove(self, value):
        current = self.head.next
        previous = self.head
        while current != None:
            if current.value == value:
                previous.next = current.next
                return
            previous = current
            current = current.next

    def pop(self):
        if self.is_empty():
            return None
        current = self.head
        while current.next.next != None:
            current = current.next
        popped_node = current.next
        current.next = None
        return popped_node.value

上述代码实现了一个单链表类,具有添加、删除、插入、遍历等操作。下面给出两个使用示例:

示例1:创建一个链表并遍历

l = LinkedList()
l.append(1)
l.add(2)
l.insert(1, 3)
l.travel()

输出:

2 3 1

示例2:从一个链表中删除一个节点

l = LinkedList()
l.append(1)
l.add(2)
l.insert(1, 3)
l.remove(2)
l.travel()

输出:

2 1

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

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

相关文章

  • 从Oracle 表格行列转置说起第1/2页

    下面我来详细讲解“从Oracle表格行列转置说起”的完整攻略。 一、行列转置的概念 行列转置是指将原有的矩阵行列互换,来得到一个新的矩阵。在数据库领域中,行列转置主要是应用于将某些数据行转换成列,或者将数据列转换成行,从而方便数据的统计和分析。 二、使用Oracle实现行列转置 在Oracle中,可以通过使用PIVOT和UNPIVOT两个函数来实现行列转置。…

    other 2023年6月25日
    00
  • python链表的基础概念和基础用法详解

    Python链表的基础概念和基础用法详解 链表是一种数据结构,它由节点组成,每个节点包含数据和指向下一个节点的引用。链表的优点是在插入/删除元素方面比数组更快,但随机访问元素的时间比较慢。 基本概念 链表的基本组成是节点,每个节点包括数据和指向下一个节点的引用。下面是一个简单的链表节点类: class Node: def __init__(self, dat…

    other 2023年6月27日
    00
  • 关于python:numpy中deg2rad和弧度之间的区别?

    在Python的NumPy库中,有两个函数可以用于角度和弧度之间的转换:deg2rad()和rad2deg()。本文将详细讲解deg2rad()和弧度之间的区别,包括使用方法和示例说明。 deg2rad()和弧度之间的区别 在数学中,角度和弧度都是用于测量角度的单位。角度是以度为单位的,而弧度是以弧度为单位的。在NumPy库中,deg2rad()函数可以将角…

    other 2023年5月7日
    00
  • 浅谈Java封装、继承、多态特性

    浅谈Java封装、继承、多态特性 封装 封装是面向对象编程的一个重要特性,即将数据和操作数据的方法绑定在一起,对外部程序隐藏对象的细节。Java中,可以使用访问修饰符(public、private、protected)来实现封装。 public:可以被任何类访问。 private:只能被当前类访问。 protected:当前类、子类和同一个包中的类可以访问。…

    other 2023年6月25日
    00
  • C++直接初始化与复制初始化的区别深入解析

    C++中,初始化对象的方式可以分为直接初始化和复制初始化。它们的区别在于,直接初始化是在变量名后面跟一对括号来完成的,而复制初始化是通过赋值号完成的。 下面我们详细讲解一下这两种初始化方式的区别: 直接初始化 直接初始化是在变量名后面跟一对括号来完成的。例如: int x(5); 在这个例子中,我们使用了直接初始化方式来创建一个整型变量x,并将其赋值为5。这…

    other 2023年6月20日
    00
  • Python数据预处理:使用Dask和Numba并行化加速

    下面是关于使用Dask和Numba并行化加速Python数据预处理的完整攻略,包括Dask和Numba的介绍、使用方法和两个示例说明。 Dask和Numba的介绍 Dask是一个用于并行化Python程序的工具包,可以在单机或分布式环境下运行。Dask提供了类似于Pandas和NumPy的API,可以处理大规模数据集,并且可以自动并行化计算过程。 Numba…

    other 2023年5月6日
    00
  • Win10累积更新补丁KB4565503怎么下载安装?

    Win10累积更新补丁KB4565503是一项重要的更新,确保您的计算机系统正常运行。以下是Win10累积更新补丁KB4565503下载和安装的完整攻略。 步骤1:检查系统当前是否需要更新 在下载和安装更新之前,您需要确认您的Win10系统需要更新。您可以通过以下方法确认: 打开“设置”应用,点击左侧的“更新和安全”选项卡; 在右侧的窗口中,点击“Windo…

    other 2023年6月27日
    00
  • include包含头文件的语句中,双引号和尖括号的区别(详解)

    在C/C++中,我们使用#include语句来包含头文件。头文件是一些预先编写好的代码文件,可以包含函数声明、宏定义等内容。在使用头文件之前,需要使用#include语句将其包含进来。 在#include语句中,头文件的名称需要放在双引号或尖括号中,这两种方式有不同的作用。 双引号方式 语法:#include “filename” 当使用双引号包含头文件时,…

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