标签:箭头 最简 问题 info 基础数据结构 添加 删除速度 说明 中间
链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。——维基百科
如果将链表简单抽象成图片,大概长这样。
是不是跟链子很像?(好吧,不是很像)但是你细品,应该还是能发现链表跟你认识的某位中老年女性的珍珠项链有几分相似。
图片中画的是一个最简单的单向链表,所以最后一个节点node5指向了null。后面还有双向链表、循环链表等,其实都是单向链表的升级版,后面会有图介绍。
既然是数据结构,就一定涉及数据的增删查等操作。
上图展示了在单向链表尾部添加节点的过程。还有在中间,在头部添加节点。步骤都一样。
理论上只要内存足够大,可以添加很多很多的节点。所以链表能储存的数据多少就非常灵活。二且添加节点几乎不耗费什么时间,只要修改几个指针的指向就OK了。
查找单向列表里面的一个节点
在链表:node1 -> node2 -> node3 -> node4 -> node5 -> null中查找node3节点。
无论用值对比(对比data中的数据是否相等),还是用索引(第几个节点)来查找节点,都需要挨个遍历之前的节点。如果链表太长就会很耗时。
删除单向链表一个节点
下面的例子,在一个链表:node1->node2->node3->node4->node5->null中删除node3。
遍历链表,发现了要删除的node3就像node2的next指针直接指向node4就好。因为是单向链表,所以这个node3永远访问不到了,也就等于从链表里面删除。
虽然查找到要删除的节点可能会费点时间。但是删除节点也是非常快速的,只要修改指针的指向。
上面我们看了单向链表的增、删、查。但是我们在查找或者删除一个节点的时候只能next、next的挨个查找。
单向链表每个节点只有一个next指针,我们可以增加一个pre指针用来指向前一个节点,这样就可以往前往后的双向查找了。
双向链表虽然可以双向遍历,但是每次都要从头开始查找。
双向链表第一个节点的pre指针,跟最后一个节点的next指针都是指向null的。我们可以把第一个节点的pre指向最后一个,而最后一个节点的next指针指向第一个节点,从而形成一个环。
你细品,是不是更像个“项链”,哈哈哈。
链表的优点
链表的缺点
标签:箭头 最简 问题 info 基础数据结构 添加 删除速度 说明 中间
原文地址:https://www.cnblogs.com/Eastry/p/12960264.html