Meta佛萨奇系统开发2.0讲解丨Meta魔豹联盟模式系统开发方案功能
2023-06-13 09:17:38 时间
单链表反转
唯一就是有一处笔误。 3.4.4 两个链表操作/链表反转 书中代码是:
def rev(self):
p = None
while self._head is not None:
q = self._head
self._head = q.next # 摘下原来的原结点
q._next = p
p = q # 将刚摘下的结点加入 p 引用的结点序列
self._head = p # 反转后的结点序列已经做好,重置表头链接
其中倒数第三行的 ._next
应该改为 .next
,因为结点类 LNode 中类属性是.next
。
q.next = p
如果把其中的 p
变量更名为 tmp_list_head
,把 q
改为 sliced_node
可能更能理解。
完整的程序,包括测试如下:
# coding:utf8
class LinkedListUnderflow(ValueError):
pass
class LNode(object):
def __init__(self, elem, next_=None):
self.elem = elem
self.next = next_
class LList(object):
def __init__(self):
self._head = None
def is_empty(self):
return self._head is None
def prepend(self, elem):
self._head = LNode(elem, self._head)
def pop(self):
if self._head is None:
raise LinkedListUnderflow("in pop")
e = self._head.elem
self._head = self._head.next
return e
def append(self, elem):
if self._head is None:
self._head = LNode(elem)
return
p = self._head
while p.next is not None:
p = p.next
p.next = LNode(elem)
def pop_last(self):
if self._head is None:
raise LinkedListUnderflow
p = self._head
if p.next is None:
e = p.elem
self._head = None
return e
while p.next.next is not None:
p = p.next
e = p.next.elem
p.next = None
return e
def rev(self):
tmp_list_head = None
while self._head is not None:
sliced_node = self._head
self._head = self._head.next
sliced_node.next = tmp_list_head
tmp_list_head = sliced_node
self._head = tmp_list_head
def elements(self):
p = self._head
while p is not None:
yield p.elem
p = p.next
def main():
lst = LList()
for i in range(10):
lst.append(i)
print "original linked list:"
for i in lst.elements():
print i
print '-' * 25
print "reserved linked list:"
lst.rev()
for i in lst.elements():
print i
if __name__ == '__main__':
main()
相关文章
- 工具推荐|ESMValTool地球系统模式评估工具
- 关于聚合卡牌盲盒模式系统开发逻辑方案设计程序(成熟代码)
- JSP+JavaBean+DAO模式+MySQL实现一个简单的注册登录(新闻登录系统)
- 浅谈BSC币安链DAPP项目模式系统开发(成熟就语言框架)
- web3.0模式MetaForce佛萨奇2.0系统开发源码解决方案
- DAPP智能合约方案模式系统开发定制(合约调用方案)
- 阐述BNB代币分红模式系统开发技术理论讲解方案
- DAPP链上智能合约模式系统开发现成成熟技术
- vue.js客服系统实时聊天项目开发(六)获取URL中的GET参数(支持/#/?单页锚点hash模式)
- 泰山众筹系统!区块链泰山众筹DAPP模式系统开发流程逻辑分析详情
- 阿凡达系统开发模式技术方案丨阿凡达模式项目系统开发技术逻辑程序(源码)
- MATIC马蹄链/系统开发/DAPP马蹄链/模式系统开发方案
- 关于usdt质押模式系统开发讲解/质押DAPP系统开发合约方案
- 一键取消Linux系统待机模式(linux取消待机)
- java 类加载器 双亲委派 根加载器、扩展类加载器、系统类加载器详解编程语言
- 模式探索Linux系统休眠模式的奥秘(linux系统休眠)
- Linux系统备份:保障数据安全最佳实践(linux系统备份模式)
- 恢复Linux系统:救援模式的使用方法(linux救援模式)
- 开启Linux之旅:安装光盘版Linux系统(光盘装linux系统)
- 模式Linux的分支模式:开创新的系统架构(linux的分支)
- 研究:影响全球天气模式的环流系统似乎正在接近一个临界点
- Linux系统教程:挽救模式破解root密码
- 不必等待:教你将系统音效换成微软 Win11
- Linux系统的故障修复之路(linux修复模式)
- 深入了解 Redis 哨兵模式原理,提高系统可用性(redis哨兵模式原理)
- 「下载最新版Linux桌面系统,开启高效工作模式」(linux桌面版系统下载)