## 链表

由于数组在插入和删除操作,都需要后面的结点。内存需要预先分配,扩容不易。

所以有了链表。链表包含一个指向下一个节点的指针和一个自己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知识大纲 · 看云相关推荐

  1. php ip操作,ip操作 · PHP 个人常用知识总结 · 看云

    # ip操作 ~~~ /** * 是否为合法的IPv4地址 * @param $ipv4 * @return mixed */ function is_valid_ipv4($ipv4) { retu ...

  2. 链表的概念以及它的作用

    以前经常听说链表这个概念,但并知道是怎么一回事,这里浅显的给大家介绍一下,作为了解. C语言中指向结构的指针和包含指针的结构这两个概念是非常重要的,我们可以使用它来建立复杂的数据结构,像链表,双向链表 ...

  3. 【内核链表】数据结构——深入理解内核链表的概念和操作笔记

    内核链表 一.内核链表的前置概念 1.容器 2.通用解决方案 二.通用型链表节点的设计 1.初始化 2.增删操作 3.查找节点 4.遍历链表 5.示例代码 三.内核链表 1.普通链表弊端 2.内核链表 ...

  4. 链表的概念、结构及优缺点

    链表 一. 链表的概念及结构 二.链表的分类 三.链表的优缺点 3.1 优点 3.2缺点 一. 链表的概念及结构 概念:链表是一种物理存储结构上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中 ...

  5. 链表有环是什么意思_互联网大厂offer收割之单向链表的概念及面试题大全

    链表是最基本的数据结构,面试官也常常用链表来考察面试者的基本能力,而且链表相关的操作相对而言比较简单,也适合考察写代码的能力.链表的操作也离不开指针,指针又很容易导致出错.综合多方面的原因,链表题目在 ...

  6. 链表基础概念与经典题目(Leetcode题解-Python语言)

    所谓链表,就是由链节点元素组成的表,那什么是链节点呢?直接上定义: class ListNode:def __init__(self, val=0, next=None):self.val = val ...

  7. 双链表的概念及其基本操作(C++)

    前言: 单链表中只有下一个结点的地址(next),所以在单链表中访问后继节点的时间复杂度是O(1),而访问前驱节点的时间复杂度则是O(n),为了克服这个单链表的这个缺点,在节点中加入前驱结点的地址(p ...

  8. c语言数组指定位置插入和删除_玩转C语言链表,单链表/双向链表的建立/遍历/插入/删除...

    最近临近期末的C语言课程设计比平时练习作业一下难了不止一个档次,第一次接触到了C语言的框架开发,了解了View(界面层).Service(业务逻辑层).Persistence(持久化层)的分离和耦合, ...

  9. 数据结构之线性表----一文看懂顺序表、单链表、双链表、循环链表

    ​ 线性表是数据结构中比较基础的内容,不过也是入门的所需要客服的第一个难关.因为从这里开始,就需要我们动手编程,这就对很多同学的动手能力提出了挑战.不过这些都是我们需要克服的阵痛,学习新的知识总是痛苦 ...

最新文章

  1. 专访DeepID发明者孙祎:关于深度学习与人脸算法的深层思考
  2. Spring3之Security
  3. GDCM:处理DICOM文件的示例
  4. 10067mysql_MYSQL数据库mysql Non-Transactional Database Only(只支持MyISAM)
  5. HDU1048 The Hardest Problem Ever
  6. java 下面的while语句退出时_java 下面的while语句退出时
  7. vue 原型设计 拖拽_设计即开发,如何打通软件研发的“任督二脉”?
  8. 前端知识点回顾——Javascript篇(三)
  9. JavaScript数据类型的隐式转换
  10. pikachu~~~验证码绕过(on client on server)
  11. c语言系统时间的结构体变量,C语言中的系统时间结构体类型
  12. 小傻蛋的妹妹跟随小甲鱼学习Python的第十二节012
  13. html简单登录页面制作
  14. 2022-2028全球对叔辛基苯酚行业调研及趋势分析报告
  15. floyd算法最短路径
  16. C语言是应用最为广泛的一种高级程序设计语言
  17. flink1.12.7+hudi 问题总结
  18. 微信小程序 WXSS和CSS的区别?什么是WXSS?
  19. IoT—物联网通信协议解析
  20. nginx启动命令以及与配置systemctl

热门文章

  1. 一个领导发给下属的邮件,醍醐灌顶!
  2. linux系统电脑小白可以用吗,linux小白说说用linux的感受
  3. 虚拟机vs裸金属服务器,裸金属虚拟机
  4. awk 4.0+ man手册翻译第一版本
  5. iPhone开发Blog
  6. Windows Server安全日志与系统事件变更审计
  7. crontab服务启动 停止 重启(linux 定时任务)
  8. iis6独立安装供下载(原创)
  9. 杨辉三角杨辉三角 || (JavaScript)
  10. WebView-WebView状态和加载方式