将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
方法一:
先创建一个哑节点,用一个指针始终指着,再创建一个节点pre指向这个哑节点。比较l1和l2的大小,将pre的next指向其中小的那个最后返回哑节点的next
class Solution {
public:
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
if(list1 == NULL){
return list2;
}
if(list2 == NULL){
return list1;
}
ListNode* prehead = new ListNode(-1);
ListNode* pre = prehead;
while(list1 != NULL && list2!= NULL){
if(list1 ->val <= list2->val){
pre->next = list1;
list1 = list1->next;
}else{
pre->next = list2;
list2 = list2->next;
}
pre = pre->next;}
pre->next = list1 == NULL ? l2 : l1;
return prehead->next;
}
};
方法二:递归
class Solution {
public:
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
if(list1 == NULL){
return list2;
}
if(list2 == NULL){
return list1;
}
if(list1->val <= list2->val){
list1->next = mergeTwoLists(list1->next, list2);
return list1;
}
list2->next = mergeTwoLists(list1, list2->next);
return list2;
}
};
递归一直挺难搞懂的