将两个升序链表合并为一个新的升序链表并返回(BAT面试题)

一,题目及示例

将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

二,解决思路
1,定义一个傀儡节点作为头节点,再弄一个为节点,使用尾插
2,循环插入链表l1,l2中的较小元素,一直循环插到一个链表为空,
3.最后将长出的链表直接链接到新链表的尾部即可

三,代码实现


public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if (l1 == null) {
        // l1 为空, 最终结果就是 l2
        return l2;
        }
        if (l2 == null) { //l2为空,最终结果就是l1
        return l1;
        }
        ListNode newHead = new ListNode(-1);   //创建一个新的头节点(傀儡节点)
        ListNode newTail = newHead;  //定义一个尾节点
        ListNode cur1 = l1; //定义一个引用节点指向l1
        ListNode cur2 = l2; //定义一个引用节点指向l2
        while (cur1 != null && cur2 != null) {  //当两个链表都不为空进入循环
        if (cur1.val < cur2.val) {
        // 把 cur1 对应的节点插入到新链表的末尾
        // 此处需要考虑到两种情况, newTail 为 null 和非 null 的情况.
        newTail.next = cur1;
        newTail = newTail.next;
        cur1 = cur1.next;
        } else {
        newTail.next = cur2;
        newTail = newTail.next;
        cur2 = cur2.next;
        }
        }
        // 当循环结束时, 意味着当前 cur1 和 cur2 一定有一个到达了链表末尾.
        // 把另外一个没到末尾的剩下的元素都连接在最终链表的尾部
        if (cur1 == null) {
        newTail.next = cur2;
        } else {
        newTail.next = cur1;
        }
        return newHead.next;
        }
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值