什么是链表php概念,链表 · PHP知识大纲 · 看云
## 链表
由于数组在插入和删除操作,都需要后面的结点。内存需要预先分配,扩容不易。
所以有了链表。链表包含一个指向下一个节点的指针和一个自己data域
> 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列节点组成,这些节点不必在内存中相连。每个节点由数据部分Data和链部分Next,Next指向下一个节点,这样当添加或者删除时,只需要改变相关节点的Next的指向,效率很高。
```c_cpp
struct Node {
void * data;
Node *next;
} Node
```
头指针:指向链表链表第一个元素的指针
头结点:就是一个含有空的数据域的结点。作为标识。
链表的结构
![5ae966fda7883](https://i.loli.net/2018/05/02/5ae966fda7883.jpg)
单链表的操作
- 查找
查找元素的时间复杂度依然是O(n)。需要从头节点遍历。
- 插入
插入一个新的元素到指定的位置,只需要改变前面元素的next指针指向该元素。不需要移动后面的元素。时间复杂度为0(n)
- 删除
删除一个元素的,只需要记住这个元素的前一个元素和后面一个元素。删掉这个元素后,采用覆盖的方法,实现删除。时间复杂度为O(1)
### 双链表
双链表是包含两个两个指针域和一个data域的链表结构。这样我们可以从两个方向遍历。
```c_cpp
struct doubleLink {
void *data;
struct doubleLink next;
struct doubleLink prev;
}
```
### 链表相关的面试题
链表是一种基础的数据结构,也是面试中常考的,
- 判断单链表是否有环
可以使用快慢指针来。如果有环,则两个指针会相遇。
- 已知两个单链表相交,求他们的第一个交点
思路:由于两个单链表相交,那么他们的尾节点一定是相同的。遍历两个链表,求出各个长度。然后求出两个链表的差N,然后让长的链表,先走N,慢的链表再同步走。当两个节点相同时。就是一个第一个交点
- 快速找到未知长度单链表的中间节点
思路1:最简单的方法,遍历一次单链表,然后求出长度。然后除以2。找到位置,然后再遍历一次。时间复杂度是O((3N/2))
思路2:快慢指针,快的指针比慢指针多走一倍,然后快的指针走到尾,慢指针恰好在中间。
- 约瑟夫环
> 在罗马人占领乔塔帕特后,39个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus和他的朋友并不想遵从,Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。
思路:可以使用循环链表的方法。
什么是链表php概念,链表 · PHP知识大纲 · 看云相关推荐
- php ip操作,ip操作 · PHP 个人常用知识总结 · 看云
# ip操作 ~~~ /** * 是否为合法的IPv4地址 * @param $ipv4 * @return mixed */ function is_valid_ipv4($ipv4) { retu ...
- 链表的概念以及它的作用
以前经常听说链表这个概念,但并知道是怎么一回事,这里浅显的给大家介绍一下,作为了解. C语言中指向结构的指针和包含指针的结构这两个概念是非常重要的,我们可以使用它来建立复杂的数据结构,像链表,双向链表 ...
- 【内核链表】数据结构——深入理解内核链表的概念和操作笔记
内核链表 一.内核链表的前置概念 1.容器 2.通用解决方案 二.通用型链表节点的设计 1.初始化 2.增删操作 3.查找节点 4.遍历链表 5.示例代码 三.内核链表 1.普通链表弊端 2.内核链表 ...
- 链表的概念、结构及优缺点
链表 一. 链表的概念及结构 二.链表的分类 三.链表的优缺点 3.1 优点 3.2缺点 一. 链表的概念及结构 概念:链表是一种物理存储结构上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中 ...
- 链表有环是什么意思_互联网大厂offer收割之单向链表的概念及面试题大全
链表是最基本的数据结构,面试官也常常用链表来考察面试者的基本能力,而且链表相关的操作相对而言比较简单,也适合考察写代码的能力.链表的操作也离不开指针,指针又很容易导致出错.综合多方面的原因,链表题目在 ...
- 链表基础概念与经典题目(Leetcode题解-Python语言)
所谓链表,就是由链节点元素组成的表,那什么是链节点呢?直接上定义: class ListNode:def __init__(self, val=0, next=None):self.val = val ...
- 双链表的概念及其基本操作(C++)
前言: 单链表中只有下一个结点的地址(next),所以在单链表中访问后继节点的时间复杂度是O(1),而访问前驱节点的时间复杂度则是O(n),为了克服这个单链表的这个缺点,在节点中加入前驱结点的地址(p ...
- c语言数组指定位置插入和删除_玩转C语言链表,单链表/双向链表的建立/遍历/插入/删除...
最近临近期末的C语言课程设计比平时练习作业一下难了不止一个档次,第一次接触到了C语言的框架开发,了解了View(界面层).Service(业务逻辑层).Persistence(持久化层)的分离和耦合, ...
- 数据结构之线性表----一文看懂顺序表、单链表、双链表、循环链表
线性表是数据结构中比较基础的内容,不过也是入门的所需要客服的第一个难关.因为从这里开始,就需要我们动手编程,这就对很多同学的动手能力提出了挑战.不过这些都是我们需要克服的阵痛,学习新的知识总是痛苦 ...
最新文章
- 专访DeepID发明者孙祎:关于深度学习与人脸算法的深层思考
- Spring3之Security
- GDCM:处理DICOM文件的示例
- 10067mysql_MYSQL数据库mysql Non-Transactional Database Only(只支持MyISAM)
- HDU1048 The Hardest Problem Ever
- java 下面的while语句退出时_java 下面的while语句退出时
- vue 原型设计 拖拽_设计即开发,如何打通软件研发的“任督二脉”?
- 前端知识点回顾——Javascript篇(三)
- JavaScript数据类型的隐式转换
- pikachu~~~验证码绕过(on client on server)
- c语言系统时间的结构体变量,C语言中的系统时间结构体类型
- 小傻蛋的妹妹跟随小甲鱼学习Python的第十二节012
- html简单登录页面制作
- 2022-2028全球对叔辛基苯酚行业调研及趋势分析报告
- floyd算法最短路径
- C语言是应用最为广泛的一种高级程序设计语言
- flink1.12.7+hudi 问题总结
- 微信小程序 WXSS和CSS的区别?什么是WXSS?
- IoT—物联网通信协议解析
- nginx启动命令以及与配置systemctl