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

合并两个排序的链表

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

思路
1.队列,通过先进先出的特性,可以将链表进行一个排序,然后再将链表串起来。
2.比较创建新链表,遍历,一次遍历就创建新的链,谁小谁被串。

结果
1.队列
运行时间:19ms
占用内存:10900KB

2.比较创建新链表
运行时间:22ms
占用内存:10788KB

代码
1.队列

public ListNode Merge(ListNode list1,ListNode list2) {
        ArrayDeque<ListNode> queue = new ArrayDeque<>();
        while (list1 != null || list2 != null){
            if (list1 == null) queue.add(list2);
            else if (list2 == null) queue.add(list1);
            else
                if (list1.val >= list2.val) queue.add(list2);
                else queue.add(list1);
            if (queue.peekLast() == list1) list1 = list1.next;
            else list2 = list2.next;
        }
        ListNode peek = queue.peek();
        while (!queue.isEmpty()){
            ListNode topNode = queue.pollFirst();
            topNode.next = queue.peek();
        }

        return peek;
}

2.比较创建新链表

 public ListNode Merge(ListNode list1,ListNode list2) {
        if (list1 == null || list2 == null) return list1==null?list2:list1;

        ListNode newListHead = list1.val >= list2.val?list2:list1;
        ListNode newList = newListHead;

        if (newList == list1) list1 = list1.next;
        else list2 = list2.next;

        while (list1 != null || list2 != null){
            if (list1 == null) {
                newList.next = list2;
                return newListHead;
            }else if (list2 == null){
                newList.next = list1;
                return newListHead;
            }else {
                if (list1.val >= list2.val) {
                    newList.next = list2;
                    list2 = list2.next;
                }
                else{
                    newList.next = list1;
                    list1 = list1.next;
                }
                newList = newList.next;
            }
        }
        return newListHead;
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务