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

合并两个排序的链表

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

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

输入: {1,3,5},{2,4,6}

返回值: {1,2,3,4,5,6}


首先思路很简单,一个while循环,里面进行比较,让新链表指针指向小的那个节点,然后移动指针,直到全部补全链表。
先附上代码,没有使用递归方法。

public class Solution {
    public ListNode Merge(ListNode list1,ListNode list2) {
        ListNode result = new ListNode(0);
        ListNode list = result;
        while(list1!=null&&list2!=null){
            if(list1.val > list2.val){
                list.next = list2;
                list2 = list2.next;
            }
            else if(list1.val == list2.val){
                list.next = list1;
                list1 = list1.next;
                list.next.next = list2;
                list2 = list2.next;
                list = list.next;
            }
            else if(list1.val < list2.val ){
                list.next = list1;
                list1 = list1.next;
            }
            else{
                return null;
            }
            list = list.next;
        }
        if (list1 == null && list2 != null) list.next = list2;
        if (list2 == null && list1 != null) list.next = list1;
        return result.next;
    }
}

简单说一下遇到的几个问题:

1. 直接将节点值赋给新链表
这样不行的原因是新的链表没有成型,导致在对list.next.value()赋值时发现根本就没有这个节点,会报空指针异常。所以我们应直接将新链表连在原来的链表上,使用原来链表的节点。
2.注意将一个链表扫描完后,另一个还没结束,这时不能再在while循环里想办法兼容,直接在while循环外一个if解决问题。因为while循环的条件是两个链表都不为空!!

全部评论

相关推荐

程序员鼠鼠_春招版:都很烂大街,rpc也基本没人问,考研吧,不然就包装一段实习再去
点赞 评论 收藏
分享
02-18 17:30
腾讯_TEG_技术
多刷**&nbsp;背八股&nbsp;刷面经&nbsp;项目话术准备好&nbsp;不会差的!!!后台看到好多小伙伴们都出现其中一个环节的错误,,,可惜了抓紧机会吧&nbsp;有的是hc&nbsp;但缺的就是稍微用心的人
野猪不是猪🐗:多刷星星,背八股背话术,真的能过你们?对一个个没实习过的学生狂问场景题设计题和底层深挖,别以为我不知道一边说缺人还一边各种kpi面
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务