题解 | #合并有序链表#

合并两个排序的链表

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

思路:
1.定义一个新的链表newHead保存合并后的链表,设置头结点为-1,头结点不能动,借助guard遍历
2.定义一个结点指针guard,实现newHead结点的遍历
3.循环比较list1,与list2的结点大小
    1)循环条件,当list1,与list2不为空时,此处list1,与list2分别遍历各自链表
    2)如果list2的值大,将guard指向list1结点,分别将guard和llist1往后移动
    3)list1大,类似
    4)当list1,或list2还有剩余时,将guard指向剩余链表
4.返回头结点newHead.next,去掉初始结点-1


/*
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 newHead=new ListNode(-1);//定义一个头结点
        ListNode guard=newHead;//定义一个可以移动的指针
       
        //重复判断
        while(list1!=null && list2!=null){
        if(list2.val>list1.val){
            guard.next=list1;
            list1=list1.next;
            guard= guard.next;
        } else {
            guard.next=list2;
            list2=list2.next;
            guard= guard.next;
        }
    }
       
        //判断剩余的,直接连接到guard下
        if(list1 != null) {
            guard.next = list1;
        }
        if(list2 != null) {
            guard.next = list2;
        }
        return newHead.next;
    }
}

刷题笔记 文章被收录于专栏

分享刷题遇到的难点,以及解题思路。

全部评论

相关推荐

野猪不是猪🐗:现在的环境就是这样,供远大于求。 以前卡学历,现在最高学历不够卡了,还要卡第一学历。 还是不够筛,于是还要求得有实习、不能有gap等等... 可能这个岗位总共就一个hc,筛到最后还是有十几个人满足这些要求。他们都非常优秀,各方面都很棒。 那没办法了,看那个顺眼选哪个呗。 很残酷,也很现实
点赞 评论 收藏
分享
04-25 19:29
已编辑
宁波大学 运营
被普调的六边形战士很高大:你我美牛孩
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务