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日

相关文章

  • Android aapt自动打包工具详细介绍

    Android aapt自动打包工具详细介绍 aapt(Android Asset Packaging Tool)是Android SDK中的一个重要工具,用于将资源文件打包成APK文件。以下是aapt工具的详细介绍和使用示例: 1. aapt工具的作用 aapt工具主要用于以下几个方面: 将资源文件(如布局文件、图片、字符串等)编译成二进制格式,以便在An…

    other 2023年10月13日
    00
  • 获取URL文件名后缀

    获取URL文件名后缀(也称扩展名或文件类型)的方法有多种,下面我将为您提供常见的三种方式。 1. 使用URL的正则表达式获取文件后缀 我们可以通过使用正则表达式来提取URL中的文件后缀。具体来说,我们可以使用以下代码来获取URL末尾的字符串: import re url = ‘https://example.com/file.jpg’ match = re.…

    other 2023年6月27日
    00
  • 详解vue过度效果与动画transition使用示例

    详解 Vue 过渡效果与动画 transition 使用示例 1. 什么是 Vue 过渡效果与动画 transition Vue 过渡效果与动画 transition 是 Vue.js 提供的用于实现页面过渡效果和动画的功能。通过在元素上添加 CSS 类名的形式,可以实现各种过渡效果和动画效果。这些效果包括渐变、平移、旋转、缩放等。 在 Vue 中,过渡效果…

    other 2023年6月28日
    00
  • Java ConcurrentHashMap实现线程安全的代码示例

    Java ConcurrentHashMap是一种线程安全的哈希表,它继承了HashMap的基本操作,同时实现了线程安全。下面我们来详细讲解Java ConcurrentHashMap实现线程安全的代码示例。 相关概念 在讲解Java ConcurrentHashMap前,需要先了解几个相关概念: 并发性:指多个线程同时读写一个共享数据结构的能力。 竞争条件…

    other 2023年6月27日
    00
  • C++ 头文件系列(set)详解

    下面我将详细讲解 “C++ 头文件系列(set)详解” 的完整攻略,包括概念、语法、使用场景和示例说明。 一、概念 在 C++ 中,头文件是一个包含 C++ 语句和声明的文件,通常包含在源文件中,从而允许代码模块化。头文件通常包含一些宏定义、全局变量和结构,可以被其它源文件共享。set 头文件是其中之一,提供了 STL 中的 set 容器用于存储一些无序的数…

    other 2023年6月27日
    00
  • 怎样才能学好java?

    当然,学好Java可能是一个漫长的过程,但是如果你能够遵循以下几个步骤,那么你的学习过程会更加高效: 1. 基础知识 首先,要学好Java,必须要掌握一些基础知识。这些包括基本的编程概念,例如变量、数据类型、运算符、循环、条件语句,以及面向对象编程中的继承、封装和多态等。阅读Java语言规范和《Java核心技术》或《Java编程思想》等经典参考书是入门的好方…

    其他 2023年4月16日
    00
  • jmeter+ant+jenkins自动化测试环境配置搭建过程

    题目要求讲解“jmeter+ant+jenkins自动化测试环境配置搭建过程”的完整攻略,下面是具体的步骤: 1. 安装JMeter JMeter 是一款常用的测试工具,我们需要先安装好。 下载安装包:Apache JMeter 下载 安装 JMeter。 2. 安装 Ant Ant 是一个 Java 应用程序构建系统,相信大家都已经熟悉它。Ant 需要使用…

    other 2023年6月27日
    00
  • anddesignpro入坑指南

    以下是“AndDesignPro入坑指南”的完整攻略: AndDesignPro入坑指南 AndDesignPro是一款基于Web的UI设计工具它提供了丰富的设计元素和模板,助您轻松创建漂亮的UI设计。本攻略将介绍如何使用AndDesignProUI设计。 步骤1:注册AndDesignPro账号 要使用AndDesignPro进行UI设计,您需要先注册一个…

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