Python 3.x 当我只对一个链接列表进行更改时,原始链接列表及其副本会同时更新吗?
我正在尝试解决LeetCode问题: 给定链接列表的头,从列表末尾移除第n个节点并返回其头 这是我的解决办法Python 3.x 当我只对一个链接列表进行更改时,原始链接列表及其副本会同时更新吗?,python-3.x,linked-list,Python 3.x,Linked List,我正在尝试解决LeetCode问题: 给定链接列表的头,从列表末尾移除第n个节点并返回其头 这是我的解决办法 class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next class Solution: def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution:
def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
Length=1
curr=head
while curr.next!=None:
Length=Length+1
curr=curr.next
count = 0
curr=head
if Length == n:
return head.next
while count < Length-n:
if count == Length-n-1:
curr.next = curr.next.next
break
count = count+1
curr = curr.next
return head
类列表节点:
定义初始值(self,val=0,next=None):
self.val=val
self.next=下一个
类解决方案:
def removeNthFromEnd(self,head:ListNode,n:int)->ListNode:
长度=1
curr=头
而现在,下一个=无:
长度=长度+1
curr=curr.next
计数=0
curr=头
如果长度==n:
返回头部。下一个
当计数
我的问题是,当我对curr(原始文件的副本)进行所有更改时,为什么这些更改也会反映在头(原始文件)中?问题是
curr
不是原始文件(节点或列表)的副本。它是您为原始列表中的给定节点指定的名称。只要不真正创建新节点(调用节点(值)
),就不能引用原始列表中的节点以外的任何内容curr
引用原始列表中一个接一个的节点,并在某个点上对next
引用进行变异。这在原始列表中发生。没有其他清单在起作用
调用者在原始列表中看不到更改的唯一时间是您不返回head
,而是返回head.next
。在这种情况下,head
仍然引用原始列表,而返回的节点引用将跳过第一个节点。但这两个列表都有共同的节点,除了head
引用的节点