【力扣每日一题】2023.8.5 合并两个有序链表

目录

题目:

示例:

分析:

代码:


题目:

【力扣每日一题】2023.8.5 合并两个有序链表_第1张图片

示例:

【力扣每日一题】2023.8.5 合并两个有序链表_第2张图片

分析:

题目给我们两个有序的链表,要我们保持升序的状态合并它们。

我们可以马上想要把两个链表都遍历一遍,把所有节点的值都放入一个容器里,排序之后再创建一个新的链表。

但是第一,题目是要求拼接链表的节点,而这么做的话有点小犯规。

第二就是没有利用到原本两个链表就是升序的这个特点。

要利用到原本链表升序的特点,我们就需要从左往右依次对两个链表的节点做比较,将较小的节点排到新链表的前面,因为两个链表原本就是升序的,所以这么做,最终合并成的新链表也是升序的。

我们需要定义一个新链表的头,然后进入一个while的循环,循环条件是两个链表至少有一个不为空指针,如果其中一个为空指针,那么新链表的下一个节点直接连上另一个链表,然后退出循环。

如果两个链表都不为空指针,那么我们就需要对比一下他们节点的值,取一个较小的作为新链表的下一个节点。

如此循环,直到最后我们就可以获取到合并两个升序链表后的新升序链表了。

代码:

class Solution {
public:
    ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
        ListNode* res=new ListNode(0,nullptr);
        ListNode* cur=res;
        while(list1!=nullptr||list2!=nullptr){
            if(list1==nullptr){
                cur->next=list2;
                break;
            }else if(list2==nullptr){
                cur->next=list1;
                break;
            }
            if(list1->valval){
                cur->next=list1;
                cur=cur->next;
                list1=list1->next;
            }else{
                cur->next=list2;
                cur=cur->next;
                list2=list2->next;
            }   
        }
        return res->next;
    }
};

你可能感兴趣的:(力扣每日一题,leetcode,链表,算法,c++,数据结构)