Python 3.x 为什么合并排序两个链表会更改原始列表?

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

我试图通过将两个排序的链表head1(1->3)和head2(2->4)传递到一个函数:merge(l1,l2)来合并排序。此函数返回合并排序的结果(即已排序的链表)。问题是,head1和head2的值在合并排序期间会更改,但它们应该保持不变

如何让head1和head2在合并排序期间保持其原始值?如果有人能帮我解决这个问题,我将非常感激

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()
是合并链表排序的迭代解决方案的一部分。