Node* mergelist(Node* head1,
Node* head2)
{
// Base cases
if (!head1)
return head2;
if (!head2)
return head1;
Node* temp = NULL;
if (head1->data < head2->data)
{
temp = head1;
head1->next = mergelist(head1->next,
head2);
}
else
{
temp = head2;
head2->next = mergelist(head1,
head2->next);
}
return temp;
}
temp
未同时保持head1
和head2
。
为head1
或head2
。
temp
表示合并列表的头。只有两个候选:合并后的列表将从第一个列表的第一个节点开始,或者从第二个列表的第一个节点开始,以值最小的一个开始。这就是if
条件检查的内容,所以我们要么进入if
块,要么进入else
块(不同时进入)。
一旦我们知道哪个节点将是合并列表的头(head1
或head2
),我们应该从进一步的合并逻辑中排除该节点,并在没有节点的情况下继续合并。这是通过递归调用函数来实现的(不包含该节点)。
temp
更好的名字应该是headOfMergedList
。