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

合并两个排序的链表

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

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode Merge(ListNode list1,ListNode list2) {
        // 如果两个链表有一个为空,则直接返回另一个非空链表,有点像之前的合并区间,利用了双指针
        // 先定义一个哨兵节点
        ListNode dummy = new ListNode(0) ;
        ListNode curr = dummy;
        // 两个链表还没有结束
        while(list1 != null  && list2 != null){
            if(list1.val < list2.val){
                curr.next  = list1;
                list1 = list1.next;
            }else{
                curr.next = list2;
                list2 = list2.next;
            }
            curr = curr.next;
        }
        curr.next = list1 != null ? list1 : list2;
        return dummy.next;
    
    }
}

题目思路比较好理解,跟之前数组的合并区间是一样的。

这里面需要新定义一个哨兵节点,它的第一个值不管,但是不能为null,否则不能next。

然后当两个链表的值都存在,不为null的时候,比较值,把较小的给dummy,由于dummy保存了头节点,还需要定义一个节点来记录当前节点,curr。赋值给curr.next之后,要记得把赋值的节点往后挪动一下,并且curr自己在一次循环后也要进行挪动。

当有节点为null的时候,直接把不为null的节点赋值给curr.next即可。

最后返回dummy.next

全部评论

相关推荐

Noob1024:一笔传三代,人走笔还在
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务