#合并两个有序链表#
这道题已经说明了升序,所以链表的节点数值是从大到小排列的,只需要挨个比较对应位置的val大小。
第一种情况:假如list1为空,那么直接return list2
第二种情况:假如list2为空,直接返回list1
第三种情况:二者都不为空,这个时候要判断list1和list2哪个头节点的值更小,然后通过递归决定下一个添加的节点,直到两个链表有一个为空。
if (list1->val < list2->val){
list1->next = mergeTwoLists(list1->next, list2); //将val较大的节点继续留下比较
return list1;
}
else{
list2->next = mergeTwoLists(list1, list2->next);
return list2;
}
整体的代码:
class Solution {
public:
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
if (list1 == nullptr) return list2;
else if (list2 == nullptr) return list1;
else if (list1->val < list2->val){
list1->next = mergeTwoLists(list1->next, list2);
return list1;
}
else{
list2->next = mergeTwoLists(list1, list2->next);
return list2;
}
}
};