python实现单链表和双链表_链表和双链表的Python实现

#结点

classNode:def __init__(self, data, next_node):

self.data=data

self.next_node=next_node#创建链表

classLinkedList:def __init__(self, first_node):

self.first_node=first_node

# 按索引读取deflink_read(self, read_index):#从第一个结点开始

current_node =self.first_node

current_index=0while current_index

current_node =current_node.next_node

current_index+= 1

#如果读到最后一个结点之后,就说明所找的索引不在链表中,因此返回None

if notcurrent_node:returnNonereturncurrent_node.data

# 查找值的索引deflink_search(self, search_value):#从第一个结点开始

current_node =self.first_node

current_index=0while current_node.data !=search_value:#如果当前结点的值不是要找的值,就需要继续顺着链往下找,直至找到我们要找的值

current_node =current_node.next_node

current_index+= 1

#如果读到最后一个结点之后,就说明所找的值不在链表中,因此返回None

if notcurrent_node:returnNonereturncurrent_index

# 插入deflink_insert(self, new_data, insert_at_index):#创建插入的新结点

new_node =Node(new_data, None)#如果在开头插入, 则将新结点指向原first_node

#并重新设置first_node

if insert_at_index ==0:

new_node.next_node=node_01

self.first_node=new_nodereturn "insert at start successfully"

#找到新结点插入位置前的那一个结点

current_node =self.first_node

current_index=0

prevent_index= insert_at_index - 1

while current_index

temporary_node=current_node#当前索引小于要找的索引前一个,就需要继续顺着链往下找,直至找到我们要找的索引值

current_node =current_node.next_node

current_index+= 1

#如果要添加的结点超过链表最大索引就插入链表最末尾

if notcurrent_node:

current_node=temporary_nodebreak

#当前结点下一个结点是新结点,新结点的下一个结点是当前结点的下一结点

new_node.next_node =current_node.next_node

current_node.next_node=new_nodereturn "insert successfully"

# 删除

deflink_delete(self, delete_at_index):#如果删除的结点是第一个,则只需将first_node重置为第二个结点便可

if delete_at_index ==0:

self.first_node=node_02returnnode_01.data#如果删除的结点不是第一个,需要找到要删结点的前一个结点

current_node =self.first_node

current_index=0

prevent_index= delete_at_index - 1

while current_index

temporary_node=current_node

current_node=current_node.next_node

current_index+= 1

#如果要删除的结点超过链表最大索引就删除链表最末尾的结点

if notcurrent_node.next_node:

temporary_node.next_node=Nonereturntemporary_node.data#要删除的结点和要删除结点的后一个结点

delete_node =current_node.next_node

after_delete_node=delete_node.next_node#将要删除结点的前一个结点的next_node指向要删除结点的后一个结点

current_node.next_node =after_delete_node

delete_node.next_node=Nonereturndelete_node.dataif __name__ == '__main__':

node_09= Node("plus", None)

node_08= Node("flay", node_09)

node_07= Node("dump", node_08)

node_06= Node("blog", node_07)

node_05= Node("load", node_06)

node_04= Node("lope", node_05)

node_03= Node("amid", node_04)

node_02= Node("upon", node_03)

node_01= Node("once", node_02)#将第一个结点node_01作为指针创建链表

link_list =LinkedList(node_01)print(link_list.link_read(5))print(link_list.link_search("dump"))print(link_list.link_insert("jeep", 12))print(link_list.link_delete(13))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值