湖州网站建设公司莆田seo推广公司
2026/1/19 0:21:41 网站建设 项目流程
湖州网站建设公司,莆田seo推广公司,wordpress的主题是什么,外贸网站seo有哪些公司30天从零学Python 通信工程专业科班生#xff0c;用了几十年MATLAB#xff0c;为了过大厂机考#xff0c;不得不自学Python。 文章目录30天从零学Python重要补充三、双向链表1. 双向链表基础1.1 双向链表的节点类定义1.2 双向链表类定义和方法2. 主要坑点总结重要补充三、双…30天从零学Python通信工程专业科班生用了几十年MATLAB为了过大厂机考不得不自学Python。文章目录30天从零学Python重要补充三、双向链表1. 双向链表基础1.1 双向链表的节点类定义1.2 双向链表类定义和方法2. 主要坑点总结重要补充三、双向链表由于做题过程中遇到很多重要但是细碎的知识点专门开辟一个系列总结一下。本集重点补充一下Python中双向链表的创建和操作方法。双向链表可以方便地动态维护一组数据但是编写代码的时候要细心主要是要记得把前后链表关联起来不要断开。1. 双向链表基础之前有学习过单向的链表就是每个节点只维护下一个节点的地址而不关心上一个节点的地址。但是这样很难访问前一个元素。所以双向链表在此基础上改进而来。1.1 双向链表的节点类定义classNode:def__init__(self,data):self.datadata self.pre_nodeNoneself.post_nodeNone1.2 双向链表类定义和方法classNode:def__init__(self,data):self.pre_nodeNoneself.post_nodeNoneself.datadataclassLinkList:def__init__(self):# 双向链表需要保存头节点和尾节点self.head_nodeNoneself.end_nodeNone# 自定义方法defget_length(self):# 返回当前链表的长度link_length0current_nodeself.head_nodewhilecurrent_nodeisnotNone:link_length1current_nodecurrent_node.post_nodereturnlink_lengthdeffind_node(self,data_i):# 返回保存了data_i的节点link_lengthself.get_length()iflink_length0:returnNonecurrent_nodeself.head_nodewhilecurrent_nodeisnotNone:ifcurrent_node.datadata_i:returncurrent_node current_nodecurrent_node.post_node prev_nodecurrent_node.pre_nodeifprev_node.data!data:returnNonedefdelete_node(self,node_i):ifself.get_length()0:return# 删除节点node_iifnode_iself.head_node:# 如果要删除的节点是头节点ifnode_i.post_nodeisNone:nx_nodeNoneelse:nx_nodenode_i.post_node# 找到当前节点的下一个节点作为新的头节点nx_node.pre_nodeNone# 将新的头节点的pre_node置为空self.head_nodenx_node# 更新当前链表的头节点重要不要忘记returnifnode_iself.end_node:new_end_nodenode_i.pre_node# 找到当前节点的上一个节点作为新的尾节点new_end_node.post_nodeNone# 将新的尾节点的post_node置为空self.end_nodenew_end_node# 更新当前链表的尾节点重要不要忘记return# 如果不是头/尾节点pre_node_in_Listnode_i.pre_node# 记录当前节点的上一个节点next_node_in_Listnode_i.post_node# 记录当前节点的下一个节点pre_node_in_List.post_nodenext_node_in_List# 将上一个节点的尾节点指向当前节点的下一个节点# 问题只修改了前驱的后继没有修改后继的前驱# 修复next_node_in_List.pre_nodepre_node_in_Listreturndefadd_node(self,node_i):# 将node_i加入链表中link_lengthself.get_length()iflink_length0:self.head_nodenode_i self.end_nodenode_i# 不要忘记这一步returnlast_nodeself.end_node# 记录当前链表的尾节点# 将当前节点加入到链表尾部node_i.pre_nodelast_node last_node.post_nodenode_i# (很重要)node_i.post_nodeNoneself.end_nodenode_i# 更新当前链表的尾节点 (很重要)returndefforward_read(self):# 正向打印current_nodeself.head_nodewhilecurrent_nodeisnotNone:print(current_node.data,end )current_nodecurrent_node.post_nodeprint()defreverse_read(self):# 正向打印current_nodeself.end_nodewhilecurrent_nodeisnotNone:print(current_node.data,end )current_nodecurrent_node.pre_nodeprint()if__name____main__:data[1,2,3,4,5]Data_LinkLinkList()fordata_iindata:node_iNode(data_i)Data_Link.add_node(node_i)Data_Link.reverse_read()Data_Link.forward_read()target_nodeData_Link.find_node(4)iftarget_nodeisnotNone:Data_Link.delete_node(target_node)Data_Link.reverse_read()Data_Link.forward_read()2. 主要坑点改动元素的时候需要先判断是否是头/尾节点如果是头/尾节点要记得把self.head_node和self.end_node更新改动的元素不是头/尾节点的时候也要记得双向更新链表总结本集以代码的方式创建和操作了双向链表。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询