首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >反向LinkedList

反向LinkedList
EN

Stack Overflow用户
提问于 2019-08-20 10:54:25
回答 1查看 79关注 0票数 1

下面给出了反向链表的两种代码,第一种是正确工作的,第二种则不是。有人能解释一下为什么会这样吗?

工作守则:

代码语言:javascript
复制
def rev(curr, prev):
    if not curr:
        return prev
    next = curr.next
    curr.next = prev
    prev = curr
    curr = next
    return rev(curr, prev)

非工作守则:

代码语言:javascript
复制
def rev(curr, prev):
    if not curr:
        return prev
    # next = curr.next
    curr.next = prev
    # prev = curr
    # curr = next
    return rev(curr.next,curr)

我以这样的方式调用上述两种功能: 主任(无)

输入:

代码语言:javascript
复制
1->2->3->4->None

第一代码的输出:

代码语言:javascript
复制
4->3->2->1->None

第二代码的输出:

代码语言:javascript
复制
1->None

所需的第二个代码的输出:

代码语言:javascript
复制
4->3->2->1->None
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-20 11:21:14

在执行以下操作之后,您正在执行递归调用return rev(curr.next,curr)

代码语言:javascript
复制
curr.next = prev

因此,在初始调用rev(head, None)中,您可以设置head.next = None,然后用None调用rev (并返回head)。

改为:

代码语言:javascript
复制
def rev(curr, prev):
    if not curr:
        return prev
    next = curr.next
    curr.next = prev
    return rev(next,curr)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57572043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档