【数据结构与算法】通俗易懂说链表

一:概述

链表(Linked list)由一些节点组成,物理存储非连续的线性表。其中每个节点都会存储下个节点的指针,由于实际存储空间不连续,对链表插入节点,删除节点可以达到O(1)的复杂度,但是对一个节点的访问需要O(n)的时间。

链表有单向链表,双向链表。

二:单向链表

单向链表的每个节点有数据项和指针(指向下个节点地址数据)组成,下图为一个单向链表,表头没有数据项,只有指向下一个节点的指针。表尾节点指向下一个节点pNext指针为NULL(空)。

结构体表示为:

//单向链表节点数据结构
typedef struct linkNode
{void *val; //数据项(任意类型)struct linkNode *next;
}node;


插入节点操作:

单向链表中由四个数据节点,数据1,数据2,数据3,数据4,现在数据1和数据2节点间插入数据5,只需把数据1节点的pNext指向新的节点,把新节点的pNext指向数据2节点即可。

删除节点操作:

删除节点2,只需把第一个节点的pNext执行数据3节点,同时释放节点2的存储空间即可。

三:双向链表

双向链表有别于单向的,每个节点除了数据项外有两个指针分别指向前一个节点和后一个节点,占用空间会大一些,可以实现从头到尾的遍历,又可以从尾到头遍历。

结构体表示为:

//双向链表节点数据结构
typedef struct dLinkNode
{void *val; //数据项(任意类型)struct dLinkNode *prev;      struct dLinkNode *next;
}node;

插入节点操作:

节点1与节点2之间插入新节点5,需要把节点1的pNext指向节点5,节点5的pHead指向节点1,节点5的pNext指向节点2,节点2的pHead指向节点5,如下图所示:

删除节点操作:

删除节点2,把节点1的pNext指向节点3,把节点3的pHead指向节点1,同时释放节点2的存储空间即可。

四:链表与数组区别

1.链表存储空间不连续,可以充分利用碎片空间,数组的存储空间是连续的,内存空间要求高,必须要有足够连续的内存空间。

2.链表的插入删除元素简单,无需对元素移动,但查询元素会慢,数组对元素的插入删除较复杂,同时使用时要预先指定长度,但数组的查询会很快。

最后,为大家准备一篇「Java最常见200+面试题全解析」,助力大家找到合适的工作,这份面试题包含的模块有:

  • Java、Jvm 最常见面试题解析;

  • Spring、Spring MVC、MyBatis、Hibernate 面试题解析;

  • MySQL、Redis 面试题解析;

  • RabbitMQ、Kafka、Zookeeper 面试解析;

  • 微服务 Spring Boot、Spring Cloud 面试解析。

扫描下面二维码付费阅读

【End】

关注下方二维码,订阅更多精彩内容。

转发朋友圈,是对我最大的支持。

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

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

相关文章

openssl漏洞检查

根据互联网安全中心的监测预报:安全协议OpenSSL近日爆出严重安全漏洞。该安全漏洞被称为“心脏流血”(Heartbleed)。出现安全漏洞的版本OpenSSL1.01自2012年3月12日已推出。这意味着数以千万计的网站已经具有潜在危险。 OpenSSL在今年4月7日推…

Yolov5实现道路裂缝检测

Yolov5实现道路裂缝检测 GitHub参考代码链接 我修改后的代码百度网盘链接 密码:2mzl 数据集链接 密码:06dj 基于Pytorch的Yolov5道路裂缝检测程序运行说明。大家可以结合我的说明和原文说明使用,有问题欢迎询问。 文章目录 Yolov5实现…

五、QPushButton按钮和QLineEdit控件操作

在第四节基础上,下面来进行QPushButton按钮和QLineEdit控件操作。 1.在主界面添加三个QLineEdit编辑框(其控件对象依次为lineEditNum1、lineEditNum2、lineEditSum)存放整数和一个按钮(其控件对象btnCalculate及5个QLable,进行2个数和的计算。 2.为按钮添加信号槽函数 单…

JVM史上最佳入门指南

提到Java虚拟机(JVM),可能大部分人的第一印象是“难”,但当让我们真正走入“JVM世界”的时候,会发现其实问题并不像我们想象中的那么复杂。唯一真正令我们恐惧的,其实是恐惧本身。而作为整个JVM系列的首篇&…

后台拿webshell的常用方法总结

时间:2014-04-16 11:22 来源:阳光在线下载标签:js6899.com一、直接上传获得webshell这种对php和jsp的一些程序比较常见,MolyX BOARD就是其中一例,直接在心情图标管理上传.php类型,虽然没有提示,其实已经成功了&#xf…

Docker Registry 删除镜像并清理

目录 修改Docker Registry配置使用Registry V2 RestfulAPI 删除镜像Docker Registry GC回收空间使用UI管理Docker Registry 修改Docker Registry配置 配置开启删除功能:config.yml version: 0.1 log:fields:service: registry storage:delete:enabled: truecache:blobdescri…

1-3.Win10系统利用Pycharm社区版安装Django搭建一个简单Python Web项目的步骤之三

在1-1.Win10系统利用Pycharm社区版安装Django搭建一个简单Python Web项目的步骤之一 基础上进行如下操作: 所有路由不能全部都在myDjango下的urls.py路由文件中,一个app创建一个路由分发文件urls.py, 在myDjango下的urls.py路由文件中只对每…

阿里《Java手册》做一个有技术情怀的人

导读最近重温了阿里的《码出高效Java开发手册》,感觉最后一页“聊聊成长”这一小块的内容写的很棒,特意把它复制出来,送给每一个技术人,愿你做一个有技术情怀的人。正文成长并没有直线式的捷径,“不走弯路就是捷径”这…

安卓应用在各大应用市场上架方法整理

安卓应用在各大应用市场上架方法整理 正在上传…重新上传取消​ ASO优化师-酱紫 酱紫ASO、ASA推广运营研究 ​关注她 1 人赞同了该文章 想要把APP上架到应用市场都要先注册开发者账号才可以。这里的方法包括注册帐号和后期上架及一些需要注意的问题。注意:首次…

关于NSIS脚本的Demo

这个NSIS脚本是打包公司的整个Release项目工程。 用NSIS编译器编译下就可以了。 ; Script generated by the HM NIS Edit Script Wizard.!include "StrFunc.nsh" ; HM NIS Edit Wizard helper defines !define PRODUCT_NAME "dlf_setup_v2.0" !define PROD…

Linux Shell编程之脚本执行方式

1.新建bash脚本文件 打开命令终端 touch hello.sh vim hello.sh2.编辑bash文件 #!/bin/bash # this is a test programerecho "hello word"3.脚本执行 赋予执行权限,直接运行 chmod 755 hello.sh ./hello.sh输出结果:

经典面试题|讲一讲JVM的组成

JVM(Java 虚拟机)算是面试必问的问题的了,而但凡问 JVM 一定会问的第一个问题就是:讲一讲 JVM 的组成?那本文就注重讲一下 JVM 的组成。 首先来说 JVM 的组成分为,整体组成部分和运行时数据区组成部分&…

ST-GCN训练自建数据集

参考了许多博文,慢慢地也就把st-gcn跑出来了,参考的文章一会附在文章里面,实测有用。 1.安装st-gcn 复现STGCN CPU版 (ubuntu16.04pytorch0.4.0openposecaffe)_Significance的博客-程序员秘密​​​​​​复现旧版STG…

[翻译] Haneke(处理图片缓存问题)

Haneke https://github.com/hpique/Haneke A lightweight zero-config image cache for iOS. 轻量级0配置图片缓存。 Haneke resizes images and caches the result on memory and disk. Everything is done in background, allowing for fast, responsive scrolling. Asking H…

Linux Shell编程之别名和常用快捷键

1.给命令起得别名,就是小名 例:给vim命令起个别名vi alias vivim2.取消别名 unalias vi常用快捷键: ctrl C 强制终止当前命令 ctrl L 清屏 ctrl U 删除或剪切光标之前内容的命令 ctrl K 删除或剪切光标之后内容的命令 ctrl Y 粘贴ctr…

面试题:为什么Java中的字符串对象是不可变的

阅读本文大概需要 4分钟。所谓不可变对象,是指一个对象在创建后,它的内部状态不会被改变的对象。这意味着当我们将一个不可变对象的引用赋值给某个变量后,我们就不能改变该对象的内部状态。 James Gosling也说过——Java开发者应该尽量使用不…

复现STGCN CPU版 (ubuntu16.04+pytorch0.4.0+openpose+caffe)

前提:ubuntu下将python3.5.2设为默认(百度) 一.下载stgcn (gitbub上fork后导入到gitee快些): st-gcn: Spatial Temporal Graph Convolutional Networks (ST-GCN) for Skeleton-Based Action Recognition in PyTorch…

arm-hisiv100nptl-linux-gcc编译boa和移植

工作需要,移植web服务器到摄像头中,查找资料,借鉴了几位前辈的文章自己弄了一下,还挺顺利的呦~系统:centos 6.4 64bit工具:arm-hisiv100nptl-linux-gcc1、交叉编译1)从www.boa.org下载Boa源码&a…

Linux Shell编程之输入输出重定向

一、.输出重定向: 1.以覆盖方式把正确输入和错误输入都保存在同一个文件中 命令 &> 文件 2.以追加方式把正确输入和错误输入都保存在同一个文件中 命令 &>> 文件 3.以追加方式把正确输入保存在文件1中,把错误输入保存在文件2中 命令 …

不止JDK7的HashMap,JDK8的ConcurrentHashMap也会造成CPU 100%

大家可能都听过JDK7中的HashMap在多线程环境下可能造成CPU 100%的现象,这个由于在扩容的时候put时产生了死链,由此会在get时造成了CPU 100%。这个问题在JDK8中的HashMap获得了解决。其实JDK7中的HashMap在多线程环境下不止只有CPU 100%这一共怪异现象&am…