python链表赋值_Python链表
发布日期:2021-10-31 18:34:53 浏览次数:40 分类:技术文章

本文共 4393 字,大约阅读时间需要 14 分钟。

1 classNode:2 '''

3 节点类4 链表节点结构 data next5 data: 节点保存的数据6 _next: 保存下一个节点对象7 '''

8

9 def __init__(self, data, pnext=None):10 self.data =data11 self._next =pnext12 #13 #def __str__(self) -> str:

14 #"""

15 #输出节点的信息

16 #:return: self.data

17 #"""

18 #return str(self.data)

19

20 def __repr__(self) ->str:21 returnstr(self.data)22

23 #def _getindex(self):

24 #return Link_list()

25

26 classLink_list:27 """

28 链表类:29 属性: 1.链表头head 2.链表长度30 方法: 1.是否为空 isEmpty 2.增加 append 3.删除节点 delete 4.修改(更新)节点 update31 5.查找节点 getNode 6.获取节点的索引 getIndex 7.插入 insert 8.清空链表clear32 """

33

34 def __init__(self) ->None:35 """

36 初始化链表,head信息为空,长度为037 """

38 self._head =None39 self._length =040

41 defisEmpty(self):42 """

43 判断链表是否为空44 :return:45 """

46 return self._length ==047

48 defappend(self, item):49 """

50

51 :param item: Node 或者 node的data信息52 :return: None53 """

54 if notisinstance(item,Node):55 item = Node(data=item)56 if notself._head:57 #head为Node对象

58 #head ---> data + nextNode

59 self._head =item60 self._length += 1

61 else:62 #取到当前的Node对象

63 _node =self._head64 #如果不是最后一个节点则一直往下找

65 while_node._next:66 _node =_node._next67 #将新的节点赋值给最后一个的_next属性

68 _node._next =item69 self._length += 1

70

71 defdelete(self,index):72 """

73 根据索引删除节点74 :param index: 索引75 :return: bool76 """

77 if notisinstance(index,int):78 raise TypeError("index应该为int类型")79 ifself.isEmpty():80 print("当前链表为空")81 returnFalse82 if index<0 or index>=self._length:83 print("输入的索引不正确")84 returnFalse85 elif index==0:86 self._head=self._head._next87 self._length-=1

88 returnTrue89 elif index==self._length-1:90 _node =self._head91 #如果不是最后一个节点则一直往下找

92 for i inrange(index):93 _node =_node._next94 _node._next=None95 self._length-=1

96 returnTrue97 else:98 _node =self._head99 for j in range(index-1):100 _node =_node._next101 _node._next=_node._next._next102 self._length-=1

103 returnTrue104

105 defpop(self,index):106 """

107 根据索引删除节点,并返回108 :param index: 索引109 :return: bool110 """

111 if notisinstance(index,int):112 raise TypeError("index应该为int类型")113 ifself.isEmpty():114 print("当前链表为空")115 returnFalse116 if index<0 or index>=self._length:117 print("输入的索引不正确")118 returnFalse119 elif index==0:120 _node =self._head121 self._head=self._head._next122 self._length-=1

123 return_node124 elif index==self._length-1:125 _node =self._head126 #如果不是最后一个节点则一直往下找

127 for i inrange(index):128 _node =_node._next129 __node =_node._next130 _node._next=None131 self._length-=1

132 return __node

133 else:134 _node =self._head135 for j in range(index-1):136 _node =_node._next137 __node =_node._next138 _node._next=_node._next._next139 self._length-=1

140 return __node

141

142 defgetNode(self,index):143 """

144 根据index得到节点145 :param index: 索引146 :return: Node对象147 """

148

149 if notisinstance(index, int):150 raise TypeError("index应该为int类型")151 ifself.isEmpty():152 print("当前链表为空")153 returnFalse154 if index < 0 or index >=self._length:155 print("输入的索引不正确")156 returnFalse157 _node =self._head158 for i inrange(index):159 _node =_node._next160 return_node161

162 defupdate(self,index,data):163 """

164 更新节点165 :param index: 索引166 :param data: 节点信息167 :return: 返回修改后的节点168 """

169 if notisinstance(index, int):170 raise TypeError("index应该为int类型")171 ifself.isEmpty():172 print("当前链表为空")173 returnFalse174 if index < 0 or index >=self._length:175 print("输入的索引不正确")176 returnFalse177 _node =self._head178 for i inrange(index):179 _node =_node._next180 _node.data =data181 return_node182

183

184 defgetIndex(self,node):185 """

186 根据节点得到节点索引187 :param node:节点188 :return:index189 """

190 ifisinstance(node, Node):191 for i inrange(self._length):192 if node isself.getNode(i):193 returni194 print("node异常")195 return

196 else:197 raise TypeError("类型不正确")198

199 definsert(self,index,item):200 if notisinstance(item, Node):201 item = Node(data=item)202 if notisinstance(index,int):203 raise TypeError("index应该为int类型")204 if index<0 or index>=self._length:205 print("输入的索引不正确")206 returnFalse207 if index==0:208 old_next =self._head209 item._next=old_next210 self._head=item211 self._length+=1

212

213 else:214 _node =self._head215 for i in range(index-1):216 _node =_node._next217 old_next =_node._next218 _node._next =item219 item._next =old_next220 self._length += 1

221 returnTrue222

223 defclear(self):224 self.head =None225 self.length =0226 returnTrue227

228 defprintl(self):229 for i inrange(self._length):230 print(self.getNode(i))

转载地址:https://blog.csdn.net/weixin_40006779/article/details/110770430 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:python sanic部署_Sanic框架应用部署方法详解
下一篇:python哪些类型可以作为迭代器_Python迭代和解析(4):自定义迭代器

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年03月31日 02时03分16秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章