LeetCode Easy|【21. 合并两个有序链表】

力扣题目链接

状态:拿到本题的第一反应就是使用双指针,分别指向两个链表的开头位置。

随后的思路就是以第一条链表为基准完成插入,并且对于遍历到的每个节点都应该保存其状态。

写了一下代码后发现,我们应该以第一个节点较小的链表作为基准链表。

随后就是开始我们的遍历操作了。

cpp 复制代码
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
    	// 其中一个链表为空,直接返回另一个链表
        if (!list1) return list2;
        if (!list2) return list1;
		
		// 确定基准链表
        ListNode* head = nullptr;
        if (list1->val <= list2->val) {
            head = list1;
            list1 = list1->next;
        } else {
            head = list2;
            list2 = list2->next;
        }
		
		// 当前操作指针指向基准链表的头节点
        ListNode* current = head;
	
		// 使用双指针来遍历两个链表
        while(list1 && list2) {
            if (list1->val <= list2->val) {
                current->next = list1;
                list1 = list1->next;
            } else {
                current->next = list2;
                list2 = list2->next;
            }
            current = current->next;
        }
		
		// 最后链接剩余的链表
        if (list1) {
            current->next = list1;
        } else {
            current->next = list2;
        }

        return head;
    }
};

当然了还有一种更加简单的思路,其实思路上主体都是一致的,不过代码上会简单很多,但是他会有一个额外的空间来申请一个新的链表。

cpp 复制代码
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
        // 创建一个虚拟头节点
        ListNode dummy(0);
        ListNode* current = &dummy;

        // 使用双指针遍历两个链表
        while (list1 != nullptr && list2 != nullptr) {
            if (list1->val <= list2->val) {
                current->next = list1;
                list1 = list1->next;
            } else {
                current->next = list2;
                list2 = list2->next;
            }
            current = current->next;
        }

        // 连接剩余的链表
        if (list1 != nullptr) {
            current->next = list1;
        } else {
            current->next = list2;
        }

        return dummy.next;
    }
};
相关推荐
吴长建先生重名了10 小时前
GitHub Actions部署报表系统踩坑记:幂等性与限
算法
贝壳69010 小时前
一个2026年2月才上传的库,凭什么敢碰2009年就有人写烂的题目
算法
文丑颜不良啊11 小时前
LeetCode2901~2920题目解析
java·leetcode
贝壳69011 小时前
同一道三亿位选型题,三个AI给了我三个答案,我把它们拉进同一台机器复跑
算法
文丑颜不良啊13 小时前
LeetCode2861~2880题目解析
java·leetcode
青少儿编程课堂13 小时前
蓝桥杯青少组图形化 + 全国青少年信息素养大赛 + 电子学会图形化考级:校园大富翁经营闯关解析
c++·python·算法·bfs·信息学竞赛
在所不辞兄14 小时前
为什么在新能源汽车电驱与热管理开发中,AI驱动的数字孪生和数据驱动仿真正在部分替代对物理台架与实车标定的依赖?
人工智能·深度学习·神经网络·算法·机器学习
I_belong_to_jesus1 天前
C++关于分支预测的优化1
开发语言·c++·算法
Code_Solitude1 天前
C语言动态内存 + 柔性数组 + 数组名退化
c语言·算法·柔性数组