合并 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
在开始时初始化一次,head1
或 head2
的副本。 current_node
然后用于将节点附加到以 head3
开头的列表。在链接列表中尝试不同的数据值,以便有时 head1.data < head2.data
有时 head1.data > head2.data
以查看 head3 在合并后并不总是相同。
为了将正确的合并用于稳定的合并排序,比较应该是 head1.data <= head2.data
。
我正在合并两个已排序的整数单链表。每个节点都有一个值,以及下一个节点的引用。编写的代码是功能性的,并且已经通过了所有相关的测试用例。
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
在开始时初始化一次,head1
或 head2
的副本。 current_node
然后用于将节点附加到以 head3
开头的列表。在链接列表中尝试不同的数据值,以便有时 head1.data < head2.data
有时 head1.data > head2.data
以查看 head3 在合并后并不总是相同。
为了将正确的合并用于稳定的合并排序,比较应该是 head1.data <= head2.data
。