Python 3.x 为什么合并排序两个链表会更改原始列表?
我试图通过将两个排序的链表head1(1->3)和head2(2->4)传递到一个函数:merge(l1,l2)来合并排序。此函数返回合并排序的结果(即已排序的链表)。问题是,head1和head2的值在合并排序期间会更改,但它们应该保持不变 如何让head1和head2在合并排序期间保持其原始值?如果有人能帮我解决这个问题,我将非常感激Python 3.x 为什么合并排序两个链表会更改原始列表?,python-3.x,Python 3.x,我试图通过将两个排序的链表head1(1->3)和head2(2->4)传递到一个函数:merge(l1,l2)来合并排序。此函数返回合并排序的结果(即已排序的链表)。问题是,head1和head2的值在合并排序期间会更改,但它们应该保持不变 如何让head1和head2在合并排序期间保持其原始值?如果有人能帮我解决这个问题,我将非常感激 class ListNode: def __init__(self, x): self.val = x self.ne
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
def merge(self, l1, l2):
dummyHead = ListNode(0)
cur = dummyHead
while l1 and l2:
if l1.val < l2.val:
cur.next = l1
l1 = l1.next
else:
cur.next = l2
l2 = l2.next
cur=cur.next
print("head 1")
self.printList(head1)
print("L1")
self.printList(l1)
print("head 2")
self.printList(head2)
print("L2")
self.printList(l2)
if l1:
cur.next = l1
else:
cur.next = l2
return dummyHead.next
def printList(self, head):
while head:
print(head.val)
head = head.next
node1 = ListNode(1)
node2 = ListNode(3)
node3 = ListNode(2)
node4 = ListNode(4)
node1.next = node2
node3.next = node4
head1, head2 = node1, node3
s = Solution()
result = s.merge(head1, head2)
类列表节点:
定义初始化(self,x):
self.val=x
self.next=无
类解决方案:
def合并(自身、l1、l2):
dummyHead=ListNode(0)
cur=dummyHead
而l1和l2:
如果l1.val
一旦cur
获取带有cur=cur的“真实”节点的值。下一个,对cur.next的任何进一步赋值将变异该节点。由于该节点是l1
或l2
,因此您实际上修改了它们所属的列表
要避免这种情况,必须为添加到结果列表中的所有节点创建新节点
因此,改变这一点:
if l1.val < l2.val:
cur.next = l1
l1 = l1.next
else:
cur.next = l2
l2 = l2.next
cur=cur.next
如果l1.val
为此:
if l1.val < l2.val:
cur.next = ListNode(l1.val)
l1 = l1.next
else:
cur.next = ListNode(l2.val)
l2 = l2.next
cur=cur.next
如果l1.val
为什么希望head
值保持不变?因为我还需要在merge()之外使用head
值。实际上,merge()
是合并链表排序的迭代解决方案的一部分。