题目描述:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4]
解题思路:解决这个问题,我们首先要重新定义一个指针,判断list1和list2所指向的节点的值的大小,比较小的那个就将其链接在定义指针的后边,依次判断完两个指针,当一个指针指向nullptr的时候,直接将另一个指针全部链接在定义指针的后边即可。
代码实现如下:
class ListNode
{
public:
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) {}
};
/*将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 */
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2)
{
ListNode* tmp = new ListNode();
ListNode *h = tmp;
while (list1 && list2)
{
if (list1->val < list2->val)
{
tmp->next = list1;
list1 = list1->next;
}
else
{
tmp->next = list2;
list2 = list2->next;
}
tmp = tmp->next;
}
while (list1)
{
tmp->next = list1;
list1 = list1->next;
tmp = tmp->next;
}
while (list2)
{
tmp->next = list2;
list2 = list2->next;
tmp = tmp->next;
}
return h->next;
}