链表基础知识

定义

链表(Linked List)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。

链表的操作

操作 时间复杂度
查找 O(n)
插入 O(1)(仅插入本身,加上查找就是O(n))
删除 O(1)(仅删除本身,加上查找就是O(n))

链表类型

链表类型 定义
单链表 节点只有一个指针,指向后继节点
双链表 节点有两个指针,一个指向前置节点,一个指向后继节点
循环链表 链表首尾相连

口诀

解题口诀:一个原则,两个考点,两个技巧,三个注意

一个原则

一个原则:画图!画图!画图!重要的事情要说三遍。链表的题目很容易把人绕晕,通过画图能够很思路理清,不容易弄错。

画图时要聚焦子结构,忽略其他信息。

两个考点

链表的题目绝大多数围绕是这两种类型:

  • 指针的修改
  • 链表的拼接

两个技巧

  • 虚拟头:用一个虚拟头指向头节点,虚拟头就是新的头节点了,而虚拟头不是题目给的节点,不参与运算,因此不需要特殊判断
  • 快慢指针:搞两个指针,一个大步走(一次走两步),一个小步走(一次走一步)

三个注意

即使画图,思路也正确了,也要注意以下三点:

  • 出现了环,造成死循环
  • 分不清边界,导致边界条件出错
  • 搞不懂递归怎么做

解题技巧

缓存

使用数组 / map 来缓存链表中结点的信息。这种方法有点赖皮,考察链表的时候,实际上不希望使用这种方式来解决。

快慢指针

一快(一次2步)一慢(一次1步)从头节点出发。对于判断是否有环、找中间节点等问题很有效。

题目包括:

双指针

一前一后从头节点出发,或者一头一尾往中间走。对于判断倒数第N个节点、反转链表等问题特别有效。

递归

链表问题都可以分割成几个相同的子问题以缩小问题规模,再通过调用自身返回局部问题的答案从而来解决大问题的。

题目包含:

参考资料

链表(LinkedList)解题总结的更多相关文章

  1. 数据结构之链表(LinkedList)(三)

    数据结构之链表(LinkedList)(二) 环形链表 顾名思义 环形列表是一个首尾相连的环形链表 示意图 循环链表的特点是无须增加存储量,仅对表的链接方式稍作改变,即可使得表处理更加方便灵活. 看一 ...

  2. 数据结构之链表(LinkedList)(二)

    数据结构之链表(LinkedList)(一) 双链表 上一篇讲述了单链表是通过next 指向下一个节点,那么双链表就是指不止可以顺序指向下一个节点,还可以通过prior域逆序指向上一个节点 示意图: ...

  3. 《数据结构与算法分析——C语言描述》ADT实现(NO.00) : 链表(Linked-List)

    开始学习数据结构,使用的教材是机械工业出版社的<数据结构与算法分析——C语言描述>,计划将书中的ADT用C语言实现一遍,记录于此.下面是第一个最简单的结构——链表. 链表(Linked-L ...

  4. leetcode面试题 02.06. 回文链表,解题心路

    目录 leetcode面试题 02.06. 回文链表,解题心路 1.题目描述 2.java语言题解一 3.java语言题解二 4.C语言题解一 leetcode面试题 02.06. 回文链表,解题心路 ...

  5. 用JavaScript来实现链表LinkedList

    本文版权归博客园和作者本人共同所有,转载和爬虫请注明原文地址. 写在前面 好多做web开发的朋友,在学习数据结构和算法时可能比较讨厌C和C++,上学的时候写过的也忘得差不多了,更别提没写过的了.但幸运 ...

  6. 双链表---LinkedList的重写

    重写Linkedlist类,改写为MyLinkedList,未继承Iterable类. public class MyLinkedList<AnyType> { private int t ...

  7. [Swift实际操作]八、实用进阶-(9)Swift中的链表LinkedList详解

    链表是一种物理存储单元上的非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针连接次序实现的.相比于线性表的顺序结构,链表比较方便插入和删除操作.本文将讲解如何模拟一个链表. //链表的节点 ...

  8. Python与数据结构[0] -&gt; 链表/LinkedList[0] -&gt; 单链表与带表头单链表的 Python 实现

    单链表 / Linked List 目录 单链表 带表头单链表 链表是一种基本的线性数据结构,在C语言中,这种数据结构通过指针实现,由于存储空间不要求连续性,因此插入和删除操作将变得十分快速.下面将利 ...

  9. Python与数据结构[0] -&gt; 链表/LinkedList[1] -&gt; 双链表与循环双链表的 Python 实现

    双链表 / Doubly Linked List 目录 双链表 循环双链表 1 双链表 双链表和单链表的不同之处在于,双链表需要多增加一个域(C语言),即在Python中需要多增加一个属性,用于存储指 ...

  10. Python与数据结构[0] -&gt; 链表/LinkedList[2] -&gt; 链表有环与链表相交判断的 Python 实现

    链表有环与链表相交判断的 Python 实现 目录 有环链表 相交链表 1 有环链表 判断链表是否有环可以参考链接, 有环链表主要包括以下几个问题(C语言描述): 判断环是否存在: 可以使用追赶方法, ...

随机推荐

  1. 转型?还是延伸?开源建站系统近乎推整套SNS社区解决方案

    转型?还是延伸?开源建站系统近乎推整套SNS社区解决方案 近乎(英文:Spacebuilder),作为.net领域的SNS社区建站系统代表之一,一直在技术开发领域算是兢兢业业,在Discuz!和Php ...

  2. Vue.js双向绑定的实现原理和模板引擎实现原理(##########################################)

    Vue.js双向绑定的实现原理 解析 神奇的 Object.defineProperty 这个方法了不起啊..vue.js和avalon.js 都是通过它实现双向绑定的..而且Object.obser ...

  3. hadoop实战–搭建eclipse开发环境及编写Hello World

    原创文章,转载请注明: 转载自工学1号馆 欢迎关注我的个人博客:www.wuyudong.com, 更多云计算与大数据的精彩文章 1.在eclise中安装hadoop的插件并配置 在上篇文章<编 ...

  4. Google翻译,3个步骤灭绝人类

    今儿这事儿得从一个新闻说起:<谷歌又飙车了,刚发布了神经机器翻译系统,没见过的语言它也能翻译> 大家如果懒的看原文,可以直接看我这个简单白话列表: Google又出来嘚瑟了,发布了基于神经 ...

  5. js 判断页面加载状态

    //----判断当前页面是否加载状态 开始 ---- document.onreadystatechange = subSomething;//当页面加载状态改变的时候执行这个方法. function ...

  6. CF 560e Gerald and Giant Chess

    题意:在h×w的棋盘中从左上角走到右下角,只能向右或向下走,有n个点不可以经过,一共有多少种方案. 解法:dp.先对点按横坐标排序(横坐标相等按纵坐标,也可以反过来)dp[i]表示不经过其他非法点走到 ...

  7. 配置php的CAS客户端

    1.下载安装xmapp 2.开启Apache服务. 3.下载php的CAS客户端源码包(我使用的是CAS-1.2.0.tgz),解压到xmap的htdocs目录下(D:\xmapp\htdocs),进 ...

  8. Visual Studio 2015 Owin+MVC+WebAPI+ODataV4+EntityFrawork+Identity+Oauth2.0+AngularJS 1.x 学习笔记之&quot;坑&quot;

    1.AngularJS route 与 MVC route http://www.cnblogs.com/usea/p/4211989.html public class SingleRoute : ...

  9. 从点亮一个LED开始,Cortex-A9裸机程序设计

    电路原理图: 如何点亮一个LED? 通过对原理图进行分析,我们能够发现给三极管的基极加上一个高点平时,三级管be结导通构成通路,此时二极管就点亮了.若要将LED熄灭只需取消高电平输出. 如何使三级管基 ...

  10. Ubuntu下安装Mysql并使用

    一.在Ubuntu终端中输入 sudo apt-get install mysql-server 二.在安装中要设置root密码,自己输入即可,但必须要记住. 三.安装后可以使用命令检测是安装成功 s ...