基于Python3的数据结构与算法 - 16 链表

目录

链表

1. 创建链表 

2. 链表的插入和删除

3. 双链表 

4. 链表总结


链表

链表是由一系列节点组成的元素集合。每个节点包含两部分,数据域item指向下一个节点得指针next。通过节点之间的相互连接,最终串联成一个链表。

class Node:def __init__(self,item):self.item = itemself.next = Nonea = Node(1)
b = Node(2)
c = Node(3)
a.next = b
b.next = cprint(a.next.item)
print(a.next.next.item)

1. 创建链表 

创建链表共有两种方法:头插法尾插法

链表总有一个头节点和一个尾节点

使用头插法创建链表(将一个列表变为链表)

class Node:def __init__(self, item):self.item = itemself.next = Nonedef create_linklist_head(li):head = Node(li[0])  # 定义头节点for element in li[1:]:node = Node(element)node.next = head  # 将插入进来的元素与head连接起来head = node  # # 再将node定义为头节点return headdef print_linklist(lk):while lk:print(lk.item, end=',')lk = lk.nextlk = create_linklist([1, 2, 3])
# print(lk.item)   # 返回头节点
print_linklist_head(lk)

使用尾插法创建列表 :

def create_linklist_tail(li):head = Node(li[0])  # 定义头节点tail = head # 此时只有一个元素for element in li[1:]:node = Node(element)tail.next = node  # 新来的元素连接到tail后面tail = node     # 再将node定义为尾节点return headlk = create_linklist_tail([1,2,3,4,5,6])
print_linklist(lk)

2. 链表的插入和删除

 列表的插入时间复杂度为O(n), 但是链表不是,因为链表不是顺序存储。

链表的插入分为两步:

  • 先将4与2相连接
  • 再将1与4相连接
p.next = curNode.next
curNode.next = p

如果此时想再将元素4删除:

  • 先将1和2链接起来
  • 再将4删除
p = curNode.next
curNode.next = curNode.next.next
del p

3. 双链表 

 双链表的每个节点有两个指针:一个指向后一个节点,另一个指向前一个节点。

class Node(object):def __init__(self. item = None):self.item = itemself.next = Noneself.prior = None

双链表的插入:

  • 先将2与3相互连接
  • 再将1与2相互连接
p.next = curNode.next
curNode.next.prioi = p
p.prior = curNode
curNode.next = p

双链表的删除:

  • 将1与3互相连接
  • 再将2删除 
p = curNode.next
curNode.next = p.next
p.next.prior = curNode
del p

4. 链表总结

顺序表(列表/数组)与链表复杂度分析:

  • 按元素查找:都是挨个遍历,复杂度都为O(n).
  • 按下标查找:列表中直接存放地址,复杂度为O(1), 链表复杂度为O(n).
  • 在某元素后插入:列表为O(n),链表为O(1)
  • 删除某元素:列表为O(n),链表为O(1)

链表在插入和删除的操作上明显快与顺序表。

链表的内存分配更加灵活。

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

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

相关文章

如何利用人工智能技术实现企业营销效率提升10倍(上)

01. 品牌营销面临越来越大的挑战 在当前行业下行周期,品牌营销正面临着前所未有的挑战。首当其冲的是高昂的营销费用,这使得企业在投入资源时更加谨慎,同时也需要寻求更加高效的营销手段来确保投入产出比的最大化。其次,由于缺乏…

Linux系统本地部署Docker Compose UI服务结合内网穿透实现公网访问

文章目录 1. 安装Docker2. 检查本地docker环境3. 安装cpolar内网穿透4. 使用固定二级子域名地址远程访问 Docker Compose UI是Docker Compose的web界面。这个项目的目标是在Docker Compose之上提供一个最小的HTTP API,同时保持与Docker Compose CLI的完全互操作性。…

探讨苹果 Vision Pro 的空间视频(术语辨析、关键技术、思考)

背景:一位资深视频技术从业者在 Pixvana 工作,积累了丰富的捕获、处理、编码、流传和播放空间媒体经验。 一、术语 空间视频:传统的 3D 视频,呈矩形,包含左右眼视图,如 iPhone15 Pro 和 Vision Pro 可录制。沉浸式视频:非矩形的环绕式视频体验,通常由两个或多个传感器…

Unity 学习笔记 5.控制飞机飞行

目录 1.摄像机跟随的方法 2.鼠标按键响应 3.键盘按键响应 4.导入素材 5.让飞机向前飞 6.摄像机跟随飞机移动 7.鼠标控制飞机倾斜 8.键盘控制飞机飞行 下载源码 UnityPackage 1.摄像机跟随的方法 2.鼠标按键响应 3.键盘按键响应 4.导入素材 下载素材 步骤: 将…

蓝桥杯 第3217题 简单的异或难题 C++ Java Python

题目 思路和解题方法 计算给定数组中子数组异或和的问题。它采用了前缀异或的方法来预处理数组,然后对于每个查询,通过异或操作计算子数组的异或和。 读取输入的数组,并计算每个位置的前缀异或和。对于每个查询,读取查询的左右边界…

css使用变量

vue3单文件SFC新特性在css里可以使用变量&#xff0c;具体使用如下&#xff1a; <template><div class"home-view"><span>测试</span><p>测试2</p></div> </template><script setup lang"ts"> imp…

C++关键字:const

文章目录 一、const的四大作用1.修饰 变量、数组2.修饰 函数的形参、修饰 引用 (最常用&#xff09;3.修饰 指针&#xff1a;常量指针、指针常量 、只读指针4.修饰 类的成员函数、修饰 类的对象 一、const的四大作用 1.修饰 变量、数组 1.const修饰变量&#xff1a; 被const修…

基于Spring Boot的煤矿信息管理系统

摘 要 系统根据现有的管理模块进行开发和扩展&#xff0c;采用面向对象的开发的思想和结构化的开发方法对煤矿信息管理的现状进行系统调查。采用结构化的分析设计&#xff0c;该方法要求结合一定的图表&#xff0c;在模块化的基础上进行系统的开发工作。在设计中采用“自下而上…

一分钟了解自动化测试【建议收藏】

引子 写在最前面&#xff1a;目前自动化测试并不属于新鲜的事物&#xff0c;或者说自动化测试的各种方法论已经层出不穷&#xff0c;但是&#xff0c;能够明白自动化测试并很好落地实施的团队还不是非常多&#xff0c;我们接来下用通俗的方式来介绍自动化测试…… 本文共有2410…

Web Service接口测试

Web service 接口测试 一. web Service概念 Web service使用与平台和编程语言无关的方式进行通讯的一项技术, web service 是一个接口, 他描述了一组可以在网络上通过标准的XML消息传递访问的操作,它基于xml语言协议来描述要执行的操作或者要与另外一个web 服务交换数据, 一组…

C语言每日一题06

一、题目 二、解析 void main &#xff08;&#xff09; { char c1&#xff0c;c2&#xff1b; int a1&#xff0c;a2&#xff1b; c1 getchar &#xff08;&#xff09;&#xff1b;//读取第一个输入&#xff0c;c11 scanf &#xff08;“%3d”&#xff0c;&a1&#xff…

2024上海慕尼黑正运动展位现场直击

3月20日&#xff0c;备受业界关注的、3C电子行业规模最大的会展活动“2024慕尼黑上海电子生产设备展”在上海新国际博览中心盛大开幕。 正运动技术本次以“打卡正运动&#xff0c;共同探讨国产全自主运动控制新发展”为主题&#xff0c;现场精心策划了一系列激动人心的有奖互动…

数据库:基本操作与用户授权

一 基本操作 1 SQL分类 数据库&#xff1a;database 表&#xff1a;table&#xff0c;行&#xff1a;row 列&#xff1a;column 索引&#xff1a;index 视图&#xff1a;view 存储过程&#xff1a;procedure 存储函数&#xff1a;function 触发器&#xff1a;trigger 事…

【开发环境搭建篇】MySQL服务器端安装和配置

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0c;产…

高效低压电源——FP7195升降压芯片打造专属电源方案

目录 方案背景 产品介绍 升降压LED驱动电源参数介绍 FP7195芯片介绍 产品应用领域 电源板详解 总结 方案背景 目前市面上的低压LED驱动电源五花八门&#xff0c;升压&#xff0c;降压都包含在内&#xff0c;不过在实际使用时总会有一定限制要求&#xff0c;比如要求电源…

19---时钟电路设计

视频链接 时钟硬件电路设计01_哔哩哔哩_bilibili 时钟电路设计 晶振是数字电路的心脏&#xff0c;数字电路需要一个稳定的工作时钟信号&#xff0c;时钟电路至关重要&#xff01; 1、晶振概述 晶振一般指晶体振荡器。晶体振荡器是指从一块石英晶体上按一定方位角切下薄片&…

(学习日记)2024.03.15:UCOSIII第十七节:任务的挂起和恢复

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

virtualBox镜像复制

镜像复制 有一个镜像后&#xff0c;图方便&#xff0c;想直接使用这个vdi文件&#xff0c;但vdi有个uuid值&#xff0c;同一个虚拟机中不能同时存在两个同样的uuid的介质的&#xff0c;普通的复制文件所得到的uuid是一样的 &#xff0c;所以需要用到自带的方法复制vdi文件&…

记录无线通信网站

https://www.rfwireless-world.com/ 包含许多无线知识的一个网站 包含了以上无线通讯协议 2.https://csa-iot.org/https://csa-iot.org/2.https://csa-iot.org/ connectivity standards alliance CSA-IOT 官网 推出的协议有&#xff1a; 如果想查找已认证CSA某种协议的产品…

如何在Ubuntu系统搭建Excalidraw容器并实现公网访问本地绘制流程图

文章目录 1. 安装Docker2. 使用Docker拉取Excalidraw镜像3. 创建并启动Excalidraw容器4. 本地连接测试5. 公网远程访问本地Excalidraw5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定公网地址远程访问 本文主要介绍如何在Ubuntu系统使用Docker部署开源白板工具Excal…