合并有序链表

合并有序链表

1、参考资料

https://www.nowcoder.com/practice/a479a3f0c4554867b35356e0d57cf03d

2、题目要求

将两个有序的链表合并为一个新链表,要求新的链表是通过拼接两个链表的节点来生成的,即不开辟新的内存空间

3、代码思路

首先,为了方便操作链表,我们定义一个 dummyHead,我们遍历两个链表,直到其中有一个到达尾部,则停下来

在遍历的过程中,我们将元素值小的节点依次链在 mergerList 的后边,最后,我们看看哪个链表还有剩余的节点,将其链在 mergeList 的后边,最后返回合并链表的首节点

4、代码实现

代码

static class Solution {
    /**
     * 合并两个有序链表
     *
     * @param list1 ListNode类
     * @param list2 ListNode类
     * @return ListNode类
     */
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        ListNode dummyHead = new ListNode(0); // 合并后链表的头结点
        ListNode mergeListPointer = dummyHead; // 合并链表的指针
        ListNode list1Poniter = list1; // list1 的指针
        ListNode list2Poniter = list2; // list2 的指针

        // 任意一个链表到尾部,则停止循环
        while (list1Poniter != null && list2Poniter != null) {
            // 将小的元素接到 mergeList 的后面
            if (list1Poniter.val < list2Poniter.val) {
                mergeListPointer.next = list1Poniter;
                list1Poniter = list1Poniter.next; // 指针后移
            } else {
                mergeListPointer.next = list2Poniter;
                list2Poniter = list2Poniter.next; // 指针后移
            }
            mergeListPointer = mergeListPointer.next; // 指针后移
        }
        // 看看哪个链表还有剩余的部分,将它接在 mergeList 的后面
        if (list1Poniter != null) {
            mergeListPointer.next = list1Poniter;
        } else {
            mergeListPointer.next = list2Poniter;
        }
        // 返回合并后链表的首结点
        return dummyHead.next;
    }
}


static class ListNode {
    int val;
    ListNode next = null;

    public ListNode(int val) {
        this.val = val;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值