lc21.合并两个有序链表

题目描述

给出两个排好序的单向链表,返回合并排序后新的单向链表

思路

新建 哨兵节点 dummy 然后进行先行合并即可。

新建头部的保护结点 dummy,设置 cur 指针指向 dummy。
若当前 l1 指针指向的结点的值 val 比 l2 指针指向的结点的值 val 小,则令 cur 的 next 指针指向 l1,且 l1 后移;否则指向 l2,且 l2 后移。
然后 cur 指针按照上一部设置好的位置后移。
循环以上步骤直到 l1 或 l2 为空。
将剩余的 l1 或 l2 接到 cur 指针后边。

代码实现

class Solution {
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        // 开哨兵节点
        ListNode *dummy = new ListNode(0);
        ListNode *cur = dummy;
        // 开始线性合并 
        while (l1 != NULL && l2 != NULL) {
            if (l1 -> val < l2 -> val) {
                cur -> next = l1;
                l1 = l1 -> next;
            }
            else {
                cur -> next = l2;
                l2 = l2 -> next;
            }
            cur = cur -> next;
        }

        cur -> next = (l1 != NULL ? l1 : l2); // 如果 其中有一个链表空了
        return dummy -> next;
```}
};

题目进阶

TODO

leetcode 23 合并K个有序链表

leetcode 1669 合并两个链表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值