关于leetcode反转链表里改变pre.next为什么head.next也跟着改变

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        pre=head
        cur= None
        while head:
            pre.next=cur
            cur=pre
            pre=head.next
            head=head.next
        return cur

我原本以为head本身就是一个链表,不需要创新新的链表t来保存原来pre.next的指针,但是在调试的过程中发现改变pre.next的值时,head也会跟着改变,这是为什么?

答案应为:

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        pre=head
        cur= None
        while head:
            t=pre.next
            pre.next=cur
            cur=pre
            pre=t
        return cur

 

因为这是同一个链表,你动了 pre.next 其实就是动了 head.next

我以为给pre链表单独分配了一个新的内存空间,所以改变pre不会影响head。但是我看了下python存储数据时,赋值语句其实只是对同一个对象贴了个新标签pre,并没有分配新地址。所有改变pre之后head也改变了。请问pre和head指向同一个链表的根本原因这样理解对吗?请问是不是C++也是指向同一个链表啊?

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632