递归方法:
记得要return list!!
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
if(!list1){ //list1为空
return list2;
}
if(!list2){ //list2为空
return list1;
}
if(list1->val<list2->val){
list1->next=mergeTwoLists(list1->next,list2);
return list1;
}
else{
list2->next=mergeTwoLists(list1,list2->next);
return list2;
}
}
};
还看到有迭代写法,更符合之前数据结构上学的
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode newHead(0);
ListNode *p = &newHead;
while (l1 != NULL && l2 != NULL) {
//处理两个表非空的情况。l1、l2指向当前需比较的结点
//p3指向结果有序单链表的表尾
if (l1->val < l2->val) {
p->next = l1;
p = p->next;
l1 = l1->next;
} else {
p->next = l2;
p = p->next;
l2 = l2->next;
}
}
if (!l1) p->next = l2;
if (!l2) p->next = l1;
return newHead.next;
}
};