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

合并两个排序的链表

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

/*
public class ListNode {
    int val;
    ListNode next = null;
    ListNode(int val) {
        this.val = val;
    }
}*/
/**
思路解析:(前提是两个链表均是有序的)
1.首先对于特殊情况的链表做出判断,如果其中一个为空,那么两表合并必为其中一个的原链表
2.创建新链表,用于保存两个链表的结合,设置为以head节点开头,后期用于返回合并链表的头节点,在这里使用cur保存head节点,为的是用于两表合并应该存放在新链表的位置
3.核心代码逻辑部分,只要两个链表不为空,那么就一直遍历,在循环中做出判断,两个链表的当前头节点val部分值的大小,小的优先放进新链表中,待不满足条件(比如其中一个链表的节点为null了),就跳出循环
4.做一些收尾操作,比如有一个链表的节点不为null,那么我们就要将剩余的节点与我们新的链表做一个指针的引用,指向旧链表当前节点的位置
*/
public class Solution {
    public ListNode Merge(ListNode list1, ListNode list2) {
        if (list1 == null) {
            return list2;
        }
        if (list2 == null) {
            return list1;
        }
	  //-------------------------以上为第一部分--------------------------------------
        ListNode head = new ListNode(0);
        ListNode cur = head;
	  //-------------------------以上为第二部分--------------------------------------
        while (list1 != null && list2 != null) {
            if (list1.val > list2.val) {
                cur.next = list2;
                list2 = list2.next;
            } else {
                cur.next = list1;
                list1 = list1.next;
            }
            cur = cur.next;
        }
	  //-------------------------以上为第三部分--------------------------------------
        if (list1 != null) {
            cur.next = list1;
        } else {
            cur.next = list2;
        }
	  //-------------------------以上为第四部分--------------------------------------
        return head.next; //返回头节点的下一个节点是因为我们使用的节点确实是从head的下一个节点开始的
    }
}

#链表类型#
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-03 14:32
点赞 评论 收藏
分享
06-13 10:15
门头沟学院 Java
想去夏威夷的大西瓜在...:我也是27届,但是我现在研一下了啥项目都没有呀咋办,哎,简历不知道咋写
点赞 评论 收藏
分享
06-08 22:25
门头沟学院 Java
从零开始的转码生活:这hr不会打开手机不分青红皂白给所有人群发这句话,过一会再给所有人再发一遍,这肯定会有重复的,不管,再过一会再发一遍
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-04 14:23
steelhead:你回的有问题,让人感觉你就是来学习的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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