将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4
可以通过一次遍历同时扫描两个链表,时间复杂度为O(m + n):
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
struct ListNode* a = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode* p,* q,* w;
a -> next = NULL;
p = a;
q = l1;
w = l2;
while(q != NULL&&w != NULL)
{
if(q->val < w->val)
{
p->next = q;
q = q->next;
p = p->next;
p->next = NULL;
}
else
{
p->next = w;
w = w->next;
p = p->next;
p->next = NULL;
}
}
while(q != NULL)
{
p->next = q;
q = q->next;
p = p->next;
p->next = NULL;
}
while(w != NULL)
{
p->next = w;
w = w->next;
p = p->next;
p->next = NULL;
}
p = a->next;
free(a);
return p;
}