算法基础(三):链表知识点及题型讲解

news2024/11/17 10:04:41

算法基础(三):链表知识点及题型讲解

  • 1 链表定义
  • 2 Python链表常用操作
    • 2.1 创建链表
    • 2.2 添加元素
    • 2.3 访问元素
    • 2.4 搜索元素
    • 2.5 更新元素
    • 2.6 删除元素
    • 2.7 获取链表长度
  • 3 力扣题目训练

一些算法基础知识点和leetcode题解,语言是python。来源于这里。

1 链表定义

在这里插入图片描述

链表分为单端链表(从前一个元素指向后一个元素)和双端链表(每一个元素不仅有next指针还有前指针,指向前一个元素。

链表的操作时间复杂度
访问 AccessO(N)
搜索 SearchO(N)
插入 InsertO(1)
删除 DeleteO(1)
  • 在链表中,访问元素需要通过next指针从头到尾遍历
  • 搜索也一样,要一个一个找
  • 插入就很快:
    在这里插入图片描述
    这里指的是这个插入方式的时间复杂度只有O(1),没有计算寻找到2的位置的时间复杂度
  • 删除也一样,如上图,如果删除4,那就把4前后的指针删掉,然后再连接2和3

总结:链表适用于“写”的操作,而不适用于“读”。写多读少。
链表的结构是值和指针:valnext

2 Python链表常用操作

2.1 创建链表

from collections import deque

linkedlist = deque()  # deque()其实是队列里的操作,这里用来链表
print(linkedlist)
# deque([])

deque()是双端队列,本质上是列表,所以操作方法和列表一样。
其实也可以创建一个链表类。

2.2 添加元素

O(1):

from collections import deque

linkedlist = deque()
linkedlist.append(1)
linkedlist.append(2)
linkedlist.append(3)
print(linkedlist)
# deque([1, 2, 3])

O(N):寻找到对应位置+插入的步骤,时间复杂度是O(1)

linkedlist.insert(2, 99)
# deque([1, 2, 99, 3])

2.3 访问元素

O(N):这个得从头到尾遍历

print(linkedlist[2])  # 99

2.4 搜索元素

O(N):还是从头到尾检查

index = linkedlist.index(99)
print(index)  # 2

2.5 更新元素

O(N):首先需要寻找到2的位置

linkedlist[2] = 88
print(linkedlist)  # deque([1, 2, 88, 3])

2.6 删除元素

O(N):要先寻找到这个数

# 删除元素
linkedlist.remove(88)
print(linkedlist)  # deque([1, 2, 3])

# 删除索引
del linkedlist[2]
print(linkedlist)  # deque([1, 2, 3])

2.7 获取链表长度

O(1):

print(len(linkedlist))  # 4

3 力扣题目训练

力扣203题:移除链表元素

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

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

相关文章

体验 buildah

体验 buildah 什么是 Buildah安装 BuildahBuildah 使用 Dockerfiles参考资料 什么是 Buildah Buildah 是一个便于构建开放容器倡议(OCI)容器镜像的工具。 Buildah软件包提供了一个命令行工具,可以用来: 创建一个工作容器&#x…

代码随想录算法训练营第三十九天|62.不同路径、63. 不同路径 II

文章目录 62.不同路径63. 不同路径 II 62.不同路径 题目链接:代码随想录 解题思路: 1.dp(i)(j):表示从(0 ,0)出发,到(i, j) 有dp(i)(j)条不同的路径 2.确定dp的表达式: dp(i)(j) dp(i-1)(j) …

OpenCV核心运算(二)—图像基本与算术操作

目录 2.1 图像的基本操作目标访问和修改像素值访问图像属性图像ROI分割和合并图像通道为图像制作边框(填充) 2.2 图像上的算术操作目标图像加法图像混合位操作练习 2.3 性能测量和改进技术目标用OpenCV测量性能OpenCV中的默认优化更多的IPython魔法命令性…

[HBZ分享] 小米手机如何解BL锁

第一步: 进入【设置—>我的设备–>全部参数–>连续疯狂的点MIUI版本那一行】 第二步:进入【更多设置–>开发者模式】,打开USB调试 与 USB安装 第三步:进入【更多设置–>开发者模式】,进入【设别解锁状…

spring eurake中使用IP注册

在开发spring cloud的时候遇到一个很奇葩的问题,就是服务向spring eureka中注册实例的时候使用的是机器名,然后出现localhost、xxx.xx等这样的内容,如下图: eureka.instance.perferIpAddresstrue 我不知道这朋友用的什么spring c…

单片机设计_自动追光系统、光源跟踪系统(AT89C51 光敏电阻 步进电机)

想要更多项目私wo!!! 一、电路设计 51 单片机双轴自动追光系统主要由 STC89C52RC 5516 光敏电阻 ADC0832 ULN2803 步进电机 LCD1602 显示屏组成。 1.通过子电路板的上、下、左、右四个光敏电阻来感受四个方向的光强,自 动寻找光强最强的方向。四个光敏电阻的…

MySQL存储引擎InnoDB、MyISAM和MEMORY介绍详解和区别

文章目录 MySQL存储引擎InnoDB、MyISAM和MEMORY介绍详解和区别InnoDB存储引擎特点操作示例创建InnoDB表修改表引擎为InnoDB MyISAM存储引擎特点操作示例创建MyISAM表修改表引擎为MyISAM MEMORY存储引擎特点操作示例创建MEMORY表修改表引擎为MEMORY 总结 MySQL存储引擎InnoDB、M…

代码随想录算法训练营第六天|242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

先了解一下什么是哈希表 哈希表是根据关键码的值而直接进行访问的数据结构 所以数组就是哈希表 盗个卡哥的图 哈希表中关键码就是数组的索引下标,然后通过下标直接访问数组中的元素,如下图所示: 哈希表能解决的问题: 一般哈…

【LeetCode】987.二叉树的垂序遍历

二叉树遍历系列 144.二叉树的前序遍历94.二叉树的中序遍历145.二叉树的后续遍历102.二叉树的层序遍历107.二叉树的层序遍历II103.二叉树的锯齿形层序遍历(之字形遍历)199.二叉树的右视图 二叉树的垂序遍历目录 二叉树遍历系列1.问题示例 1示例 2示例 3 …

校招又临近了,怎么在面试中应对设计模式相关问题呢?

夏天开始了,那么夏天结束时的毕业季也不远了。毕业是个伤感、期待而又略带残酷的时节,就像蜜桃无论成熟与否都会在这个时间被采摘,如果毫无准备就踏入社会,就会……马上变成低级社畜。所以说还是要早点为了毕业找工作做点准备&…

Stereo-Detection:YOLO v5与双目测距结合,实现目标的识别和定位测距

简介:Stereo-Detection 是一个传统的SGBM深度测距yolov5目标检测,并部署在Jeston nano的开源教程。它致力于让更多的大四学生毕业,以及让研一学生入门 开源链接:yzfzzz/Stereo-Detection: Conventional SGBM depth ranging yolov…

【android专题】学习android,第一天学习:软件和组件了解

开发软件和手机建立连接 1.建立连接 2.运行App程序到手机,通过USB线 选择你的小米设备 run按钮 下面这个,就是你设备的日志 通过USB安装时,报错,大概意思就是,默认手机是禁止通过usb安装软件的, 要打开…

Automa自动化爬取图片(二)

Automa插件可以扩展Automa的功能,使其可以与其他应用程序进行交互。例如,Automa插件可以用于自动化测试Web应用程序,批量发送邮件,自动化填写表单等。通过Automa插件,我们可以更加灵活地定制自己的自动化测试工具&…

Linux 配置YUM源(FTP方式获取软件源、使用阿里云yum源、同时使用本地源与在线源)YUM获取安装包并生成YUM软件仓库

YUM介绍 YUM(yellow dog updater modified) 基于RPM包构建的软件更新机制 自动解决依赖关系 yum软件仓库集中管理软件包 RPM软件包的来源 centos发布的RPM包集合第三方组织发布的RPM包集合用户自定义的RPM包集合 软件仓库的提供方式 FTP服务:…

阿里4年测试经验分享 —— 测试外包干了3年后,我废了...

去年国庆,我分享了一次一位阿里朋友的技术生涯,大家反响爆蓬,感觉十分有意思,今天我来分享一下我另一位朋友的真实经历,是不是很想听? 没错,我这位朋友是曾经外包公司的测试开发,而…

SAPJNet:小样本多序列MRI诊断的序列自适应原型联合网络

文章目录 SAPJNet: Sequence-Adaptive Prototype-Joint Network for Small Sample Multi-sequence MRI Diagnosis摘要方法Sequence-Adaptive Transformer原型优化策略 实验结果 SAPJNet: Sequence-Adaptive Prototype-Joint Network for Small Sample Multi-sequence MRI Diagn…

【2023-4-8 美团春招笔试题 开发岗(技术综合-后端数开软开)】

题目一&#xff1a; 代码一&#xff1a; #include <iostream> #include <string> using namespace std;int main() {int n,m,a;cin>>n>>m>>a;string s[n][m];for(int i0;i<n;i){for(int j0;j<m;j){cin>>s[i][j];}}int count0;for(i…

【MySQL】(7)复合查询

文章目录 单表查询回顾与练习多表查询自连接多行子查询&#xff08;单列&#xff09;in 运算符all 关键字any 关键字 多列子查询from 子句中的子查询合并查询 单表查询回顾与练习 注&#xff1a;下面的依旧基于 scott 数据库 MariaDB [scott]> select * from emp; -------…

【历史上的今天】4 月 23 日:YouTube 上传第一个视频;数字音频播放器的发明者出生

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2023 年 4 月 23 日&#xff0c;世界读书日。在 1564 年的这一天&#xff0c;全世界最卓越的文学家之一莎士比亚出生&#xff1b;1616 年的这一天&#xff0c;莎士比亚…

ubuntu22.04普通用户配置cuda

ubuntu22.04普通用户配置cuda 1. 问题描述2. 解决方法2.1 查看安装cuda版本2.2 修改普通用户自己的环境变量2.3 重新执行初始化文档2.4 查看nvcc版本&#xff0c;测试是否成功 1. 问题描述 在ubuntu22.04服务器上使用root用户安装了cuda&#xff0c;普通用户登录时仍然没办法直…