怎么在Python中实现一个单链表?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
关于链表
- <李>
链表(链表)是由许多相同数据类型的数据项按照特定顺序排列而成的线性表。
李> <李>链表中个数据项在计算机内存中的位置是不连续且随机的,数组在内存中是连续的。
李> <李>链表数据的插入和删除很方便,但查找数据效率低,下不能像数组一样随机读取数据。
李>单链表的实现
- <李>
一个单向链表的节点由数据字段和指针组成,指针指向下一个元素所在内存地址
李> <李>定义一个链表节点类,self.value实例属性表示节点数据字段;自我。下表示指针;初始化值为没有
李> <李>class 节点(对象): def 才能;__init__(自我,,value=https://www.yisu.com/zixun/None,接下来=None): 自我。值=值 自我。明年=
,
李> <李>在单链表中第一个节点为头(头)指针节点(<强>即头指针指向的节点为单链表第一个节点,后续简称头指针节点强>),从头指针节点出发可以遍历整个链表,进行元素查找,插入和删除,非常重要。一般不移动头头指针。
李> <李>单链表中最后一个节点为尾节点,其指针为None,表示结束。
李> <李>建立单链表我们首先需要<强>创建头指针节点强>(引入头指针是为了方便操作单链表,对于头指针节点,只有指针域指向链表第一个节点,不含实际值)
李> <李>class linkedList(对象): def 才能__init__(自我): ,,,self.head =,节点()#,创建头指针结点 ,,,self.length =, 0 #,初始链表长度,头指针节点不计入长度 def 才能__len__(自我):#,重写特殊方法返回self.length ,,,return self.length
,
李> <李>链表初始化之后,开始定义链表方法
李> <李><>强链表头部插入节点:强>
李>- <李>
待插入节点指向原头指针节点,头指针重新指向待插入节点
李> <李>首先需要将原头指针结点,存放到临时变量中(<强>防止头指针变更时,指针断裂导致数据丢失,链表中指针就是连接的纽带,其中某个纽带断裂(即指针指向其他)则后续数据都将丢失强>)
李> <李>将头指针指向新插入节点
李> <李>新插入节点指针指向原头指针节点
李> <李>长度+ 1
李> <李>插入节点既是链表头指针指向的节点也是尾节点(指向None)
李> <李>调用节点()传入待插入的值价值创建待插入节点
李> <李>判断当前链表是否为空链表,链表为空:
李> <李>链表不为空:
李> <李>,, def head_insert(自我,,值):,#,链表头部插入 ,,,node =,节点(值) ,,,if self.head.next ==,没有: ,,,,,self.head.next =,节点 ,,,,,node.next =,没有 ,,,: ,,,,,#,插入元素指针域指向原头元素 ,,,,,tmp_head =, self.head.next #,原头指针节点存储到tmp_head ,,,,,self.head.next =, node #,新头指针指向节点 ,,,,,node.next =, tmp_head #,新插入节点指向原头指针节点 ,,,self.length +=, 1李> <李>
<>强链表头部删除节点:强>
李>- <李>
头指针指针域(指针域存放下一节点的内存地址,即头指针节点)指向头指针,也就是说链表第一个节点变成了头指针头,由于头不计入链表,所以就相当于删除了第一个节点(有点绕)
李> <李>同时返回删除的值
李> <李>依旧是先判断链表是否为空,为空则返回假
李> <李>链表不为空时:
李> <李>,, def head_del(自我):,#,删除头结点,返回头结点的值 ,,,if self.head.next ==,没有: ,,,,,return 错误的 ,,,: ,,,,,#,头指针指针域指向自己 ,,,,,self.head =self.head.next ,,,,,self.length -=1 ,,,,,return self.head。李价值> <李>
<>强链表尾部添加节点:强>
李>- <李>
首先通过而循环(循环条件为节点指针是否为None)找到当前链表的最后一个元素
李> <李>然后将当前最后一个元素指向待插入节点
李> <李>长度+ 1
李> <李>创建待插入节点对象