当前位置: 首页 > 知识库问答 >
问题:

反向单链表(不知道为什么我的代码错了)

闽承望
2023-03-14

作为一名链表数据结构的学习者,我正在练习Leetcode问题“反向链表”,我有自己的解决方案,但不知道为什么它是错误的,有专家可以分享一些指导吗?真的很感激!

Leetcode问题:

反转单链接列表。

例:

输入:1-

输出: 5-

我的代码:

class Solution(object):
    def reverseList(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        prev = None
        while head:
            temp = head
            temp.next = prev
            head = head.next
            prev = temp
        return prev

然而,上述解决方案是错误的,但可以通过在“temp.next=prev”和“head=head.next”之间切换位置进行纠正,如下所示:

class Solution(object):
    def reverseList(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        prev = None
        while head:
            temp = head
            head = head.next
            temp.next = prev
            prev = temp
        return prev

对我来说,切换两种说法没有区别,怎么就不一样了呢?

共有3个答案

锺博耘
2023-03-14

temp=head使temp引用与head相同的对象

记住这一点,下一行temp。next=prev实际上与head相同。next=prev,因为它们在代码中引用了相同的对象

修复程序解决了这个问题,因为在您影响head引用的对象之前,您将重新分配head完全引用的对象-特别是链接列表中的下一个对象。

闻飞跃
2023-03-14

你必须记住,在表面之下,我们处理的是指针,以及它们在内存中指向的空间。

对于第一个解决方案,head不能将自己分配给head.next,因为temp.next现在指向无。通过将temp.next分配为null,您已经有效地将head.next重新分配为null。

第二种解决方案通过重新分配头到头来解决这个问题。下一个这并不意味着温度会随着头部移动。头现在指向头。然后,temp指向head的前一个节点(在它转到head.next之前)。

郎曾笑
2023-03-14

以下是循环开始前的参考资料:

prev --> None
head --> [something| *-]-> [something| *-]-> ...

temp=head之后:

prev --> None
head --> [something| *-]-> [something| *-]-> ...
         ^
         |
temp ----+

temp之后。下一步=上一步

prev --> None
head --> [something| *-]-> None    .... -> [something| *-]-> ...
         ^
         |
temp ----+

你不再有任何关于列表中头后面部分的参考<代码>头部=头部。接下来只需将设置为prev然后被设置为现在被截断的列表的开头。

 类似资料:
  • 给定一个0和1的数组,我们最多可以将K个值从0更改为1。 返回仅包含1的最长(连续)子数组的长度。 例1: 例2: 注: https://leetcode.com/problems/max-consecutive-ones-iii/ 这是问题链接。在第一个测试用例中,我得到了输出9,但应该是6。我不知道哪里出了问题?

  • 我拿不到输出。。有人能帮我得到输出吗 下面给出了程序运行的示例(注意:下面的粗体文本是用户输入的输入): 输入三角形的三条边

  • 抱歉,如果不允许这样做。这是我第一次问问题。无论如何,我应该实现一个程序,根据文本读取等级。 “实施一个程序,根据以下内容计算理解某些文本所需的大致年级水平。文本:恭喜!今天是你的一天。你要去很棒的地方!你走了,走了!3 年级 在完成代码之后。每次我编译它时,它都会给我一个异常,即我除以零。几乎就像在我要求用户输入文本后,它根本不被读取,字母计数保持在零。我不知道如何绕过它。下面是我导入java.

  • 如果参数的类型是int或float,函数应该返回>函数输入的绝对值。 否则,函数应返回“nope” 我已经完成了第一个任务,但我认为我已经完成了任务

  • 我在 Debian 上托管了一个 web 应用程序,在端口 8443 上公开。我正在使用SSL的letsencrypt证书(通过certbot),当我连接到 https://example.com:8443 时,webapp工作正常。 为了允许连接通过https://example.com我使用nginx作为反向代理,多年来一直运行良好。然而,在上个月发生了一些事情,这些事情不再起作用。我的配置不

  • 我拿不到输出。。有人能帮我得到输出吗 下面给出了程序运行的示例(注意:下面的粗体文本是用户输入的输入): 进入三角形的三个边