class Solution {
public:
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
ListNode list3;
ListNode* l3=&list3;
while(list1&&list2){
if(list1->val<=list2->val){
l3->next=list1;
list1=list1->next;
} else {
l3->next=list2;
list2=list2->next;
}
l3=l3->next;
}
if(list1){
l3->next=list1;
}
if(list2){
l3->next=list2;
}
return list3.next;
}
};
-
创建一个新的链表
list3
作为合并后的链表,同时创建一个指向list3
的指针l3
。 -
进入一个循环,条件是
list1
和list2
都不为空。在循环中,比较list1
和list2
当前节点的值,选择较小的节点连接到list3
的后面。然后将list1
或list2
向前移动一个节点,以准备下一次比较。 -
不断重复步骤2,直到其中一个链表为空。这时,将另一个非空链表的剩余部分连接到
list3
的后面。 -
最后,返回
list3
的下一个节点,因为list3
的第一个节点是一个虚拟节点,不包含实际数据。
这个函数的目的是将两个有序链表合并成一个新的有序链表,它的时间复杂度是 O(m + n),其中 m 和 n 分别是两个输入链表的长度。这是因为在循环中,我们只需遍历一次两个输入链表,并将节点连接到新链表中。