题目描述
合并两个已排序的链表并作为一个新的链表返回。新的列表应该通过拼接前两个列表的节点来完成。
解题思路
新建一节点,遍历链表,谁小谁就是新建节点的next
我的脑洞
如果l1中某个节点小于l2中某个节点,则继续比较l1中下一个节点与l2当前节点的大小,l2同理
奇怪的代码示例
class Solution {
public:
ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) {
ListNode *res = new ListNode(0);
ListNode *p = res;
while (l1 && l2) {//每逢边界,我就会出错
ListNode *pre;
while (l1 && l2 && l1->val <= l2->val){//每逢边界,我就会出错
p->next = l1;
p = p->next;
l1 = l1->next;
}
while (l2 && l1 && l1->val > l2->val){//每逢边界,我就会出错
p->next = l2;
p = p->next;
l2 = l2->next;
}
}
if (l1) p->next = l1;
if (l2) p->next = l2;
return res->next;
}
};
正常的代码示例
class Solution {
public:
ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) {
ListNode *res = new ListNode(0);
ListNode *p = res;
while (l1 && l2) {
if (l1->val <= l2->val){
p->next = l1;
l1 = l1->next;
}
else{
p->next = l2;
l2 = l2->next;
}
p = p->next;
}
if (l1) p->next = l1;
if (l2) p->next = l2;
return res->next;
}
};