还记得上次面试挂在了链表上,记忆忧新,最近特别赶工重新学习了数据结构等一系列知识,恶补自己的基础。今天趁着复习链表的时候,把Python的链表代码详细的讲解一遍。谢谢大家的支持。
进入正题,链表是一种数据结构,是一种典型的线性结构。它的存储的方式并不像顺序表那样,是按照顺序一个挨着一个放置的,它的每一个节点(就是存储在其中的一个元素单元)都不是相邻的,所以相对来讲,链表不需要一块完整的内存,但是由于每个节点都需要存储下一个节点的位置信息,所以所占用的内存,其实还会比较多一点,来一张图片理解一下吧。
很容易发现,顺序表中的单元,一个挨一个放置,而链表,需要多加一个元素来存放下一个的地址,所以,从这里我们可以推断出这两个结构的比较的一部分:
顺序表:
一、逻辑(下标)上相邻的元素物理(内存)上也相邻!
二、需要一整块的内存(由图很轻易就能知道,不连续就不是顺序表了)
三、读取简单(直接通过下标,解释器就能直接计算并寻址,时间复杂度为O(1))
链表:
一、不需要一整块内存,(因为每个节点(node)都是分开存放的)
二、逻辑上相邻的元素,其实并不相邻。
三、读取较难(因为需要从“头”开始,一个挨一个的顺序读,假设读第n个元素,就要寻址n次,时间复杂度为O(n))。
我们还从上图得到一个消息,我们每个节点有两个属性——本身的值,下一个节点的位置。
所以代码应该这么写:
class SingleNode(object):
"""单链