暴力解法:
非递归,逐段选取插入
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {//并入第一个数值小的链表
if (l1 == NULL) {
return l2;
}
else if (l2 == NULL) {
return l1;
}
ListNode* ls, * lb;
if (l2->val < l1->val) {
ls = l2; lb = l1;
}
else {
ls = l1; lb = l2;
}
ListNode* i = ls, * j = ls, * m = lb, * n = lb, * t;
while (m != NULL) {
while (i->next != NULL && i->next->val < m->val) {
i = i->next;
}
if (i->next != NULL) {
j = i->next;
}
if (i->next == NULL) {
i->next = m;
return ls;
}
while (n->next != NULL && n->next->val <= j->val) {
n = n->next;
}
i->next = m;
t = n->next;
n->next = j;
m = t;
n = t;
i = j;
}
return ls;
}
递归解法:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {//并入第一个数值小的链表
if (l1 == NULL) {
return l2;
}
else if (l2 == NULL) {
return l1;
}
if (l1->val < l2->val) {
l1->next = mergeTwoLists(l1->next, l2);
return l1;
}
else {
l2->next = mergeTwoLists(l1, l2->next);
return l2;
}
}