前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Meta佛萨奇系统开发2.0讲解丨Meta魔豹联盟模式系统开发方案功能

Meta佛萨奇系统开发2.0讲解丨Meta魔豹联盟模式系统开发方案功能

原创
作者头像
系统_I8O28578624
发布2023-03-23 15:51:06
2220
发布2023-03-23 15:51:06
举报
文章被收录于专栏:YYDSYYDS

单链表反转

唯一就是有一处笔误。 3.4.4 两个链表操作/链表反转 书中代码是:

代码语言:javascript
复制
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

代码语言:javascript
复制
        q.next = p

如果把其中的 p 变量更名为 tmp_list_head,把 q 改为 sliced_node可能更能理解。

完整的程序,包括测试如下:

代码语言:javascript
复制
# 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()

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 单链表反转
相关产品与服务
腾讯云服务器利旧
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档