将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
class Solution {
public:
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
if(list1 == nullptr)
{
return list2;
}
if (list2 == nullptr)
{
return list1;
}
if(list1-> val < list2->val)
{
list1->next = mergeTwoLists(list1->next,list2);
return list1;
}
else
{
list2->next = mergeTwoLists(list1,list2->next);
return list2;
}
}
};
假设我们有两个升序链表:
链表1:1 -> 3 -> 5 -> 7
链表2:2 -> 4 -> 6 -> 8
我们希望将这两个链表合并为一个新的升序链表:
合并后的链表:1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8
现在,让我们逐步解释代码中的逻辑:
-
初始化:我们从两个链表的头节点开始,即
list1
指向1
,list2
指向2
。 -
比较节点值:我们比较
list1
和list2
的节点值,由于1 < 2
,我们进入第一个if
语句块。 -
递归调用:在第一个
if
语句块中,我们将list1
的下一个节点和list2
作为参数,递归调用mergeTwoLists
函数。这将继续比较list1
的下一个节点(即3
)和list2
的节点值(即2
)。 -
连接节点:在递归调用返回后,我们将返回的结果(即合并后的链表的一部分)连接到
list1
的下一个节点上。然后,我们返回list1
作为当前合并后链表的头节点。 -
返回结果:最终,我们返回合并后链表的头节点,即
1
。