python实现单项链表

2024-03-10 09:28
文章标签 python 实现 链表 单项

本文主要是介绍python实现单项链表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 问题

如何用python实现单项链表。

2 方法

单向链表也叫单链表,是链表中最简单的一种形式,is_empty() 链表是否为空。length() 链表长度 travel() 遍历整个链表 add(item) 链表头部添加元素 append(item) 链表尾部添加元素 insert(pos, item) 指定位置添加元素 remove(item) 删除节点 search(item) 查找节点是否存在

Dan代码清单 1

#单链表的实现
class SingleLinkList(object):
   """单链表"""
def __init__(self):
       self._head = None
def is_empty(self):
       """判断链表是否为空"""
       return self._head == None
def length(self):
       """链表长度"""
       # cur初始时指向头节点
       cur = self._head
       count = 0
       # 尾节点指向None,当未到达尾部时
       while cur != None:
           count += 1
           # 将cur后移一个节点
           cur = cur.next
       return count
def travel(self):
       """遍历链表"""
       cur = self._head
       while cur != None:
           print(cur.item)
           cur = cur.next
def add(self, item):
       """头部添加元素"""
       # 先创建一个保存item值的节点
       node = SingleNode(item)
       # 将新节点的链接域next指向头节点,即_head指向的位置
       node.next = self._head
       # 将链表的头_head指向新节点
       self._head = node
def append(self, item):
       """尾部添加元素"""
       node = SingleNode(item)
       # 先判断链表是否为空,若是空链表,则将_head指向新节点
       if self.is_empty():
           self._head = node
       # 若不为空,则找到尾部,将尾节点的next指向新节点
       else:
           cur = self._head
           while cur.next != None:
               cur = cur.next
           cur.next = node
def insert(self, pos, item):
       """指定位置添加元素"""
       # 若指定位置pos为第一个元素之前,则执行头部插入
       if pos <= 0:
           self.add(item)
       # 若指定位置超过链表尾部,则执行尾部插入
       elif pos > (self.length() - 1):
           self.append(item)
       # 找到指定位置
       else:
           node = SingleNode(item)
           count = 0
           # pre用来指向指定位置pos的前一个位置pos-1,初始从头节点开始移动到指定位置
           pre = self._head
           while count < (pos - 1):
               count += 1
               pre = pre.next
           # 先将新节点node的next指向插入位置的节点
           node.next = pre.next
           # 将插入位置的前一个节点的next指向新节点
           pre.next = node
   def remove(self, item):
       """删除节点"""
       cur = self._head
       pre = None
       while cur != None:
           # 找到了指定元素
           if cur.item == item:
               # 如果第一个就是删除的节点
               if not pre:
                   # 将头指针指向头节点的后一个节点
                   self._head = cur.next
               else:
                   # 将删除位置前一个节点的next指向删除位置的后一个节点
                   pre.next = cur.next
               break
           else:
               # 继续按链表后移节点
               pre = cur
               cur = cur.next
   def search(self, item):
       """链表查找节点是否存在,并返回True或者False"""
       cur = self._head
       while cur != None:
           if cur.item == item:
               return True
           cur = cur.next
       return False
# 测试代码
if __name__ == "__main__":
   ll = SingleLinkList()
   print("链表是否为空:", ll.is_empty())
   print("链表长度为:", ll.length())
ll.append(1)
print("链表是否为空:", ll.is_empty())
   print("链表长度为:", ll.length())
ll.append(2)
   ll.append(3)
   ll.append(4)
ll.append(5)
   ll.append(6)
   ll.travel()
   print("链表中是否存在元素5:", ll.search(5))  

3 结语

链表由于增加了结点的指针域,空间开销比较大,但对存储空间的使用要相对灵活(不需要连续的存储空间)。

这篇关于python实现单项链表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/793794

相关文章

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3

Java实现删除文件中的指定内容

《Java实现删除文件中的指定内容》在日常开发中,经常需要对文本文件进行批量处理,其中,删除文件中指定内容是最常见的需求之一,下面我们就来看看如何使用java实现删除文件中的指定内容吧... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细介绍3.1 Ja

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基

PostgreSQL中MVCC 机制的实现

《PostgreSQL中MVCC机制的实现》本文主要介绍了PostgreSQL中MVCC机制的实现,通过多版本数据存储、快照隔离和事务ID管理实现高并发读写,具有一定的参考价值,感兴趣的可以了解一下... 目录一 MVCC 基本原理python1.1 MVCC 核心概念1.2 与传统锁机制对比二 Postg

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

C++中零拷贝的多种实现方式

《C++中零拷贝的多种实现方式》本文主要介绍了C++中零拷贝的实现示例,旨在在减少数据在内存中的不必要复制,从而提高程序性能、降低内存使用并减少CPU消耗,零拷贝技术通过多种方式实现,下面就来了解一下... 目录一、C++中零拷贝技术的核心概念二、std::string_view 简介三、std::stri

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM