#结点
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))