python单链表实现代码实例

下面是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日

相关文章

  • ActionScript的API文档生成工具ASDoc

    ASDoc是一种基于ActionScript语言的API文档生成工具,可以通过注释生成完整的文档,方便其他开发者阅读和使用代码。下面是ASDoc的详细攻略: 1. 安装ASDoc ASDoc是一个单独的工具包,需要手动安装。可以将其下载下来,然后将ASDoc.exe放入到Flex SDK的bin目录下。 2. 编写代码注释 在代码中编写好注释是使用ASDoc…

    other 2023年6月26日
    00
  • 变量延迟详解 call setlocal

    变量延迟详解 call setlocal 完整攻略 在批处理脚本中,call setlocal 是一个非常有用的命令,它可以创建一个局部作用域,使得在该作用域内定义的变量仅在该作用域内有效。这种变量延迟的机制可以帮助我们更好地控制变量的作用范围,避免变量冲突和混淆。下面是关于 call setlocal 的详细讲解和示例说明。 1. call setloca…

    other 2023年8月17日
    00
  • Vue组件封装方案实现浅析

    Vue组件封装方案实现浅析 在Vue中,组件的封装是非常重要的。封装好的组件具有高度的可复用性,易于维护和测试。本文将介绍Vue组件封装的方案,帮助开发者更好地封装组件。 一、组件封装的原则 在封装组件时,需要遵循以下原则: 尽可能地将组件拆分成更小的组件,使得功能更加明确,单一。 组件应该具有高度的可配置性,在不同的场景下能够适应不同的需求。 封装的组件应…

    other 2023年6月25日
    00
  • Java父类继承中的static和final用法

    Java父类继承中的static和final用法 在Java类继承中,子类可以继承父类的静态成员和常量。但是,静态成员和常量也可以被重新定义和修改。在本篇攻略中,我们将详细讲解Java父类继承中static和final的用法及实例。 static 在Java中,static的作用是使类加载时直接可用,而不必实例化。这意味着可以通过类名直接访问它们。 当子类继…

    other 2023年6月26日
    00
  • motionpro如何使用

    下面是关于如何使用MotionPro的完整攻略: 1. 什么是MotionPro? MotionPro是一款用于创建动画和交互式内容的软件。它提供了一系列的工具和功能,用于创建2D和3D动画、交互式内容、游戏、广告等。MotionPro支持多种输出格式,包括HTML5、视频、GIF等。 2. 安装MotionPro 首先,需要从MotionPro官网下载并安…

    other 2023年5月7日
    00
  • iOS 14.5/iPadOS 14.5(18E199) RC准正式版更新(附更新内容)

    iOS 14.5/iPadOS 14.5(18E199) RC准正式版更新攻略 iOS 14.5/iPadOS 14.5(18E199) RC准正式版是苹果公司最新发布的操作系统更新版本。本攻略将详细介绍该版本的更新内容,并提供两个示例说明。 更新内容 App Tracking Transparency (ATT) 该更新引入了App Tracking Tr…

    other 2023年8月3日
    00
  • Python批量更改文件名的实现方法

    以下是“Python批量更改文件名的实现方法”的完整攻略: 一、方案说明 在Python中,批量更改文件名可以使用os模块和shutil模块来实现。其中os模块用于获取文件列表和更改文件名,shutil模块用于移动或复制文件。 具体实现的步骤如下: 使用os.listdir()方法获取待更改文件名列表。 使用os.rename()方法将文件名重命名为新的文件…

    other 2023年6月26日
    00
  • 使用Go module和GoLand初始化一个Go项目的方法

    当我们开始一个新的Go项目时,使用Go Module来管理依赖关系是一个很好的选择。Go Module帮助我们自动化地下载和管理项目中所需的包。 在GoLand中使用Go Module来初始化一个新项目有以下几个步骤: 步骤1:创建一个新的空白项目 在GoLand中,打开“File”菜单,选择“New Project”选项。在弹出的窗口中,选择“Empty …

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