python单链表实现具体例子,双链表合并python
本文主要详细介绍python双向链表的例子。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。
用python实现双向链表,供你参考。具体情况如下
双向链表:意思是数据链接在一起,每个数据是一个节点,每个节点有一个数据区和两个链接区,分别链接上一个节点和下一个节点。
数据区:存储数据的地方。
上一个:链接上一个节点。
下一个:链接下一个节点。
双向链表操作
1.链表是空的吗?
2.链表的长度
3.遍历链表
4.向链表的头部添加元素。
5.在链表的末尾添加元素。
6.在链表中的指定位置添加一个元素。
7.删除链表中的节点。
8.找出该节点是否存在。
代码实现
# Functions函数声明
类节点():
实例化节点类
def __init__(self,item):
self.item=项目
self.prev=无
self.next=无
类链表():
所有存储节点类
def __init__(self):
初始化头节点
默认值为空。
self.head=无
# 1.链表是空的吗?
定义为_空(自身):
返回self.head==None
# 2.链表的长度
定义长度(自身):
返回节点的长度。
实例化一个光标
使用此光标遍历所有数据。
使用计数器,遍历一个数据,加1,最后输出计数器。
#实例化光标
cur=self.head
#技术专家
#如果链表为空,则不进入循环,直接输出0。
计数=0
#遍历所有数据
一边诅咒!=无:
计数=1
下一个
返回计数
# 3.遍历链表
def treval(self):
遍历链表获取所有数据。
用游标遍历整个链表,每次输出cur.item的值。
注意,链表是空的,
#实例化一个游标
cur=self.head
#遍历链表
一边诅咒!=无:
print(cur.item,end= )
下一个
打印()
# 4.向链表的头部添加一个元素
定义添加(自身,项目):
标题添加数据
分析:
1.将数据添加到头部。当链表为空时:self.head指向node。
2.链表非空时:先设置node.next=self.head.next然后说self.head=node。
#实例化节点
节点=节点(项目)
#添加数据
#确定链表是否为空。
if self.is_empty():
#为空,直接将self.head指向节点。
self.head=node
else:
#如果不为空,首先设置noede。
node.next=self.head
self.head.prev=node
self.head=node
# 5.在链表的末尾添加一个元素
定义附加(自身,项目):
在尾部添加数据
分析:
首先将指针指向尾节点。
Cur.next=最后一个节点的节点,node.prev=cur
# 实例化节点
node = Node(item)
# 实例化游标
cur = self.head
# 移动游标到最后一个节点
# 如果链表为空
# 直接使用头插法
if self.is_empty():
self.add(item)
else:
while cur.next != None:
# cur.next 不为空,则进入循环, 上次循环,是进入上上个节点,但 将cur = cur.next,就指向了最后一个节点
cur = cur.next
node.prev = cur
cur.next = node
# 6. 链表指定位置添加元素
def insert(self, index, item):
"""
指定位置添加数据
分析
单链表中需要实例化两个有游标
双向链表,直接向指针指向索引的位置
将这个位置节点的 cur.
"""
# 实例化节点
node = Node(item)
# 实例化游标
cur = self.head
# 起始位置
count = 0
if index<=0:
# 使用头插法
self.add(item)
elif index > (self.length()-1):
self.append(item)
else:
# 移动游标
while count < index:
# 增加一
count += 1
# 移动游标到索引位置
cur = cur.next
node.next = cur
node.prev = cur.prev
cur.prev.next = node
cur.prev = node
# 7. 链表删除节点
def remove(self,item):
"""
删除指定的节点
首先实例化节点,遍历链表,找到该节点,删除该节点
"""
# 实例化游标
cur = self.head
# 遍历链表,找到该节点
while cur != None:
if cur.item == item:
if self.head == cur:
self.head = cur.next
if cur.next:
cur.next.prev = None
else:
cur.prev.next = cur.next
# 如果有下个节点,防止最后一个节点
if cur.next:
cur.next.prev = cur.prev
pass
break
else:
cur = cur.next
# # 8. 查找节点是否存在
def search(self, item):
"""
查看节点是否存在
分析
遍历链表,查看每一个节点的数据区
空链表
只有头节点
只有尾节点
"""
# 实例化一个游标
cur = self.head
# 遍历链表
while cur != None:
if cur.item == item:
return True
else:
cur = cur.next
return False
测试运行
# 程序的入口if __name__ == "__main__":
s = Linklist()
print(s.is_empty()) # True
s.append(100)
s.append(200)
s.append(300)
s.add(6)
s.insert(1, 10)
s.search(6)
s.treval() # 6 10 100 200 300
s.remove(100)
s.treval() # 6 10 200 300
pass
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持盛行IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。