将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
先比大小再合并的
对l1和l2每个数的大小进行比较,先把小的数存放到p中,直到有一个链表到达表尾。
再将另一个链表中的数全部放入p中。
时间复杂度为O(min(m,n)) ,每一次比较运算一次,
空间复杂度为O(m+n)
c++实现:
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode* res=new ListNode(0),* p=res;
while(l1&&l2) //循环直到其中一个链表到达表尾
{
if(l1->val<l2->val)
{
p->next=l1; //直接指向l1这个指针。
l1=l1->next;
}
else
{
p->next=l2;
l2=l2->next;
}
p=p->next;
}
p->next=l1?l1:l2;
return res->next;
}
};
python实现:
class Solution:
def mergeTwoLists(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
re=ListNode(0)
r=re
while(l1 and l2):
if(l1.val<l2.val):
r.next=l1
l1=l1.next
else:
r.next=l2
l2=l2.next
r=r.next
r.next=l1 if l1 else l2
return re.next