合并 Java 中的两个排序列表,参考问题

Merging two sorted lists in Java, reference question

我正在合并两个已排序的整数单链表。每个节点都有一个值,以及下一个节点的引用。编写的代码是功能性的,并且已经通过了所有相关的测试用例。

head3节点在永远不会更新的情况下,如何指向排序后的合并单链表中的下一个正确节点?

static SinglyLinkedListNode mergeLists(SinglyLinkedListNode head1, SinglyLinkedListNode head2) {
    
    if (head1 == null) return head2;
    if (head2 == null) return head1;
    
    SinglyLinkedListNode head3 = null;
    if(head1.data < head2.data){
        head3 = head1;
        head1 = head1.next;
    } else{
        head3 = head2;
        head2 = head2.next;
    }
    SinglyLinkedListNode current_node = head3;
    while(head1 != null && head2 != null){
        if(head1.data < head2.data){
            current_node.next = head1;
            head1 = head1.next;
        } else{
            current_node.next = head2;
            head2 = head2.next;
        }
        current_node = current_node.next;
    } 
    if(head1 == null){
        current_node.next = head2;
    } else {
        current_node.next = head1;
    }
    return head3;
}

Current_node 被声明并分配了与 head3 相同的值和下一个节点的引用。但是,在接下来的 while 循环中,根据比较语句更新下一个节点的引用 (current_node.next)。 head3 永远不会更新,并且仍然具有它在初始 if else 语句 (head3.next).

中的下一个节点引用

当返回head3时,它应该指向合并排序单链表中的下一个节点,但这个引用永远不会改变。为什么?

head3 在开始时初始化一次,head1head2 的副本。 current_node 然后用于将节点附加到以 head3 开头的列表。在链接列表中尝试不同的数据值,以便有时 head1.data < head2.data 有时 head1.data > head2.data 以查看 head3 在合并后并不总是相同。

为了将正确的合并用于稳定的合并排序,比较应该是 head1.data <= head2.data