题解 | #合并两个排序的链表#

合并两个排序的链表

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

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param pHead1 ListNode类
     * @param pHead2 ListNode类
     * @return ListNode类
     */
    public ListNode Merge (ListNode pHead1, ListNode pHead2) {
	// 新的集合,按从小打到大记录排序比较后的节点
        ListNode merge = new ListNode(-1);
	// 记录每次两个链表比较后的较小值
        ListNode dump = merge;
        merge1(dump, pHead1, pHead2);
        return merge.next;
    }

    /**
    * 两个有序链表合并成一个有序链表
    */
    public ListNode merge1(ListNode dump, ListNode pHead1, ListNode pHead2) {
	// 当两个链表有一个全部节点比较完成后,另外一个链表剩余的节点直接加入到dump后面即可,因为两个链表都是有序的,所以另外一个链表剩余的节点一定是有序且靠后的
        if (pHead1 == null) {
            dump.next = pHead2;
            return dump;
        }
        if (pHead2 == null) {
            dump.next = pHead1;
            return dump;
        }
        int val1 = pHead1.val;
        int val2 = pHead2.val;
        if (val1 <= val2) {
	// 记录链表下一个节点的值
            ListNode next = pHead1.next;
	// 将链表当前的节点和下一个节点切断连接
            pHead1.next = null;
	// 记录每次比较后较小的节点值加入到dump下一个节点
            dump.next = pHead1;
            merge1(dump.next, next, pHead2);
        } else {
            ListNode next = pHead2.next;
            pHead2.next = null;
            dump.next = pHead2;
            merge1(dump.next, pHead1, next);
        }
        return null;
    }
}

全部评论
不要问我为什么递归还搞这么复杂。。。我是真的太菜了,只能按照基础的想法来,不然脑子转不过来,必须搞出一个新的merge集合才行,我看人家大神的我理解不了,只能这样了,哈哈哈
点赞 回复 分享
发布于 2024-03-25 14:17 浙江

相关推荐

不愿透露姓名的神秘牛友
07-07 12:04
毕业生招你惹你了,问一个发薪日来一句别看网上乱七八糟的你看哪个工作没有固定发薪日扭头就取消了面试就问了一句公司都是这个态度吗还搞上人身攻击了...
程序员小白条:呃呃呃,都还没面试,我都不会问这么细,何况通不通过,去不去都另说,你没实力和学历的话,在外面就这样,说实话没直接已读不回就不错了,浪费时间基本上
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务