原题描述为
Listnode* func( Listnode *l1, Listnode *l2)通过这个函数把两个升序链表做按顺序排在一个链表里。
我的解决方案是这样的
// 谨防空指针
if (l1 == nullptr)
return l2;
if (l2 == nullptr)
return l1;
// 把l2插到l1里面
ListNode *result = l1;
l1 = l1->next;
while (l2 != nullptr){
// 通过这两个指针判断现在指向的位置是不是要放在两者之间
ListNode *last = nullptr;
ListNode *copy = result;
// 对于固定的l2 在copy中找到合适的位置
while (copy != nullptr){
if (last != nullptr){
if (l2->val > last->val &&
l2->val <= copy->val){
ListNode *node;
node = new ListNode(l2->val, copy);
last->next = node;
break;
}
}
else{
if (l2->val <= copy->val){
ListNode *node;
node = new ListNode(copy->val,copy->next);
copy->val = l2->val;
copy->next = node;
break;
}
}
if (copy->next == nullptr){
ListNode *node;
node = new ListNode(l2->val);
copy->next = node;
break;
}
last = copy;
copy = copy->next;
}
l2 = l2->next;
}
return result;
整体逻辑相对复杂不太容易理清楚
在评论区看到一个非常漂亮用递归的算法
虽然学过递归,但是在实际用的时候还是想不起来。给自己提个醒 😃