class Solution {
public:
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
//通过比较节点中value大小,来进行串联两个链表
if(list1 == nullptr) return list2;
else if(list2 == nullptr) return list1;
else if(list1->val < list2->val)//如果链表1的值小于链表2的值,那么就将链表1的下一个节点和链表2进行合并,反之将链表2的下一个节点和链表1进行合并
{
list1->next = mergeTwoLists(list1->next,list2);
return list1;
}
else
{
list2->next = mergeTwoLists(list1,list2->next);
return list2;
}
}
};
/**
* 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) {
//迭代法:
ListNode* prehead = new ListNode(-1);//哨兵节点是一个虚拟节点,在头结点之前
ListNode* prev = prehead;
while(list1 != nullptr && list2 != nullptr)
{
if(list1->val <= list2->val)
{
prev->next = list1;
list1 = list1->next;
}
else
{
prev->next = list2;
list2 = list2->next;
}
prev = prev->next;
}
prev->next = list1 == nullptr ? list2 :list1;//若list为空将list接在后面,反之依然
return prehead->next;
}
};