力扣刷题记录---利用python实现链表的基本操作

news2024/9/27 12:13:25

文章目录

  • 前言
  • 一、利用python实现链表的基本操作
    • 1.节点的定义使用类实现:
    • 1.链表的定义使用类实现:
    • 3.判断是否为空函数实现:
    • 4.链表长度函数实现:
    • 5.遍历链表函数实现:
    • 6.头插法函数实现:
    • 7.尾插法函数实现:
    • 8.在链表指定位置插入值函数实现:
    • 9.删除某一个值函数实现:
    • 10查看某个节点是否存在函数实现:


前言

如何使用python实现链表的基本操作,包括结点的定义,链表的定义,求链表长度,链表是否为空等等一系列函数


提示:以下是本篇文章正文内容,下面案例可供参考

一、利用python实现链表的基本操作

链表中的节点应该包含数值和指向下一个元素的地址。

1.节点的定义使用类实现:

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

由于python万物皆对象,变量实际上是对象的引用,相当于就保存了对象的地址

1.链表的定义使用类实现:

链表的定义如下,也是使用类实现:

class Single_LinkList():
    def __init__(self,node = None):
        self.head = node

初始化时会自动生成一个空链表,其中head指向None

3.判断是否为空函数实现:

    def is_empty(self):
        """链表是否为空"""
        if self.head == None:
            return True
        else:
            return False

4.链表长度函数实现:

    def length(self):
        """链表长度"""
        len = 0
        cur = self.head
        while cur != None:
            len = len + 1
            cur = cur.next
        return len

5.遍历链表函数实现:

    def travel(self):
        """遍历链表"""
        cur =  self.head
        while cur != None:
            print(cur.elem)
            cur = cur.next

6.头插法函数实现:

    def add(self,item):
        """链表头部进行添加元素"""
        node = Node(item)
        node.next = self.head
        self.head = node

7.尾插法函数实现:

    def append(self,item):
        """链表尾部进行添加元素"""
        node = Node(item)
        cur = self.head
        if self.is_empty():
            self.head = node
        else:
            while cur.next != None:
                cur = cur.next
            cur.next = node
            node.next = None

8.在链表指定位置插入值函数实现:

    def insert(self,pos,item):
        """
        在指定位置上添加元素
        :param pos: 从0开始
        :param item:
        :return:
        """
        node = Node(item)
        count = 0
        cur = self.head
        while cur != None:
            if count == pos - 1:
                node.next = cur.next
                cur.next = node
                break
            cur = cur.next
            count = count + 1

9.删除某一个值函数实现:

    def remove(self,item):
        """删除某一个节点"""
        cur = self.head
        count = 0
        if self.is_empty():
            print("删除失败")
        elif self.head.elem == item:
            self.head = self.head.next
        else:
            while cur.next != None:
                if cur.next.elem == item:
                    cur.next = cur.next.next
                    break
                cur = cur.next

10查看某个节点是否存在函数实现:

    def search(self,item):
        """查看某个节点是否存在"""
        cur = self.head
        while cur != None:
            if cur.elem == item:
                return True
            cur = cur.next
        return False

完整代码如下:

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

class Single_LinkList():
    def __init__(self,node = None):
        self.head = node
    def is_empty(self):
        """链表是否为空"""
        if self.head == None:
            return True
        else:
            return False
    def length(self):
        """链表长度"""
        len = 0
        cur = self.head
        while cur != None:
            len = len + 1
            cur = cur.next
        return len
    def travel(self):
        """遍历链表"""
        cur =  self.head
        while cur != None:
            print(cur.elem)
            cur = cur.next
    def add(self,item):
        """链表头部进行添加元素"""
        node = Node(item)
        node.next = self.head
        self.head = node
    def append(self,item):
        """链表尾部进行添加元素"""
        node = Node(item)
        cur = self.head
        if self.is_empty():
            self.head = node
        else:
            while cur.next != None:
                cur = cur.next
            cur.next = node
            node.next = None
    def insert(self,pos,item):
        """
        在指定位置上添加元素
        :param pos:0开始
        :param item:
        :return:
        """
        node = Node(item)
        count = 0
        cur = self.head
        while cur != None:
            if count == pos - 1:
                node.next = cur.next
                cur.next = node
                break
            cur = cur.next
            count = count + 1
    def remove(self,item):
        """删除某一个节点"""
        cur = self.head
        count = 0
        if self.is_empty():
            print("删除失败")
        elif self.head.elem == item:
            self.head = self.head.next
        else:
            while cur.next != None:
                if cur.next.elem == item:
                    cur.next = cur.next.next
                    break
                cur = cur.next
    def search(self,item):
        """查看某个节点是否存在"""
        cur = self.head
        while cur != None:
            if cur.elem == item:
                return True
            cur = cur.next
        return False

测试代码如下:

if __name__ == "__main__":
    Linklist = Single_LinkList()
    print(Linklist.is_empty())
    print(Linklist.length())
    print(Linklist.append(1))
    print(Linklist.is_empty())
    print(Linklist.length())
    print(Linklist.append(2))
    print(Linklist.append(3))
    print(Linklist.append(4))
    print(Linklist.append(5))
    Linklist.add(8)
    Linklist.insert(1,10)
    Linklist.remove(8)
    # Linklist.remove(8)
    Linklist.travel()
    print(Linklist.search(1))

结果如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/809287.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手把手一起上传本地项目至Gitee仓库

1、Gitee新建仓库 创建自己的Gitee账号,新建仓库,如图所示: 根据自己的项目情况,填写仓库信息,如图所示: 仓库创建完成,如图所示: 2、下载Git 下载地址可用链接: https://registry…

xxl-Job分布式任务调度

1.概述 1.1 什么是任务调度 我们可以先思考一下业务场景的解决方案: 某电商系统需要在每天上午10点,下午3点,晚上8点发放一批优惠券。某银行系统需要在信用卡到期还款日的前三天进行短信提醒。某财务系统需要在每天凌晨0:10结算前一天的财…

流数据湖平台Apache Paimon(一)概述

文章目录 第1章 概述1.1 简介1.2 核心特性1.3 基本概念1.3.1 Snapshot1.3.2 Partition1.3.3 Bucket1.3.4 Consistency Guarantees一致性保证 1.4 文件布局1.4.1 Snapshot Files1.4.2 Manifest Files1.4.3 Data Files1.4.4 LSM Trees 第1章 概述 1.1 简介 Flink 社区希望能够将…

新材料技术的优势

目录 1.什么是新材料技术 2.新材料技术给人类带来了哪些便利 3.新材料技术未来的发展趋势 1.什么是新材料技术 新材料技术指的是通过科学和工程技术的手段开发和应用全新的材料,以满足特定的需求和应用。新材料技术是材料科学和工程领域的重要研究方向&#xff0…

【Java】使用JDBC操作MySQL 8

文章目录 1. JDBC概述2. JDBC快速入门2.1 下载驱动jar包2.2 数据准备2.3 创建工程2.4 编写代码 3. JDBC API详解3.1 DriverManager3.2 Connection3.2.1 获取执行SQL对象3.2.1 管理事务 3.3 Statement3.3.1 执行DML语句3.3.2 执行DDL语句 3.4 ResultSet3.4.1 ResultSet对象方法3…

解读 Zebec Protocol 发布的最新路线图,向 Web2 世界跨越的野望

近期,流支付协议 Zebec Protocol 发布了最新的路线图,揭示了生态在未来一年的全新发展规划。目前, Zebec Protocol 生态打造了一套全新的产品矩阵,包括模块化 Layer3 链 Nautilus Chain 、流支付应用 Zebec APP 以及薪酬管理协议 …

小红书怎么推广 方法经验总结

大家好,我是网媒智星,今天跟大家分享一下小红书怎么推广,总结一些方法经验。 小红书上的引流变现逻辑包括以下步骤: 选题—封面标题—内容评论—钩子—私域—成交—裂变 如果你希望在小红书上进行正确、安全的引流,…

Virtualbox虚拟机中Ubuntu忘记密码

1、首先重新启动Ubuntu系统,鼠标快速点一下Virtualbox虚拟机窗口获取焦点,然后按住shift键,以调出grub启动菜单。 2、根据提示按下键盘E键进入编辑模式,向下移动光标,将如下"ro quiet splash $vt_handoff"部…

Java开发环境以及项目搭建案例汇总

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 友情提示 1、 假若你的设备已有可用的Java开发基础环境,则无需重新搭建 2、 假若你需重新搭建Java开发,请务必彻底卸载之前的环境 3、 请尽量保证与…

Reinforcement Learning with Code 【Code 1. Tabular Q-learning】

Reinforcement Learning with Code 【Code 1. Tabular Q-learning】 This note records how the author begin to learn RL. Both theoretical understanding and code practice are presented. Many material are referenced such as ZhaoShiyu’s Mathematical Foundation o…

WIZnet W5100S-EVB-Pico 静态IP配置教程(二)

W5100S是一个硬连线TCP/IP封装以太网控制器W5100S支持间接并行总线和高速SPI接口2种方式与主机进行通信。其内部还集成了以太网数据链路层(MAC)和10Base -T/100Base -T 以太网物理层(PHY),支持自动协商(10/…

记录vue的一些踩坑日记

记录vue的一些踩坑日记 安装Jq npm install jquery --save vue列表跳转到详情页,再返回列表的时候不刷新页面并且保持原位置不变; 解决:使用keepAlive 在需要被缓存的页面的路由中添加:keepAlive: true, {path: /viewExamine,nam…

Docker安装 Mysql 8.x 版本

文章目录 Docker安装 Mysql 8.0.22Mysql 创建账号并授权Mysql 数据迁移同版本数据迁移跨版本数据迁移 Mysql 5.x 版本与 Mysql 8.x版本是两个大版本,这里演示安装Mysql 8.x版本 Docker安装 Mysql 8.0.22 # 下载mysql $ docker pull mysql 默认安装最新…

SolidWorks(1)

打开solidworks,选择零件选择草图、绘制草图选择上视基准面 最后完成草图 选择拉伸切除 最终成品 鼠标按住中键,进行旋转

优思学院:六西格玛的10大概念和特点

六西格玛是一种管理方法,致力于提高组织的运营效率和质量水平。它起源于20世纪80年代的美国,随后在全球范围内得到广泛应用。今天我们将探讨六西格玛的十大概念和特点,帮助您了解如何将这一管理方法应用于您的业务中。 1. 什么是六西格玛&am…

【前端知识】React 基础巩固(三十七)——自定义connect高阶组件

React 基础巩固(三十七)——自定义connect高阶组件 一、手撸一个自定义connect高阶组件 import { PureComponent } from "react"; import store from "../store";/*** connect的参数:* 参数一: 函数* 参数二: 函数* 返…

TiProxy 尝鲜

说明 最近发现 tidb 有个 GitHub - pingcap/TiProxy 仓库,抱着好奇的心态想试试这个组件的使用效果。于是按照文档的介绍在本地环境使用tiup做了一些实验,现在将实验过程和实验结果分享给大家。 TiProxy介绍 官方README介绍的已经很清楚了,…

QT 调用USB免驱摄像头

文章目录 前言一、界面布局二、QImageEncoderSettings类三、图像的显示总结 前言 本篇文章来讲解一下如何使用QT调用摄像头,这里我使用的是USB免驱动摄像头,使用不需要按照驱动QT就可以调用到摄像头。 一、界面布局 这里使用QT设计师进行界面的布局&a…

数据结构:树的存储结构

学习树之前,我们已经了解了二叉树的顺序存储和链式存储,哪么我们如何来存储普通型的树结构的数据?如下图1: 如图1所示,这是一颗普通的树,我们要如何来存储呢?通常,存储这种树结构的数…

vmware磁盘组使用率100%处理

今天在外办事时,有客户发过来一个截图,问vmware 磁盘组空间使用率100%咋办?如下图: 直接回复: 1、首先删除iso文件等 2、若不存在ISO文件等,找个最不重要的虚拟机直接删除,删除后稍等就会释放…