【Google-onsite题目】Merge Two Sorted List

题目来源

时间是2016年7月21日,MTV onsite,第三轮,第一题。html

题目内容

参考leetcode的第21题,要求很简单,将两个排好序的链表合并成一个新的排好序链表。1->2->53->4->6两个输入值,获得1->2->3->4->5->6。这题简单的就像小时候动画片结束以后的有奖问答。node

作法

两个链表各起一个指针,再建一个head指针,用来寻找下一个排好序的值。必需要说,这题须要对链表这种结构的熟悉,动画片的有奖竞猜也是要看动画片的。动画

code

public class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        //作个dummy node,防止两个链表里面有空的。
        ListNode dummy = new ListNode(0);
        ListNode head = dummy;
        //分别建两个指针,指向l1和l2,在后来能够预防链表出界。
        ListNode p1 = l1;
        ListNode p2 = l2;
        while(p1 != null && p2 != null){
            //按照大小找下一个节点。
            if(p1.val < p2.val){
                head.next = p1;
                p1 = p1.next;
            }
            else{
                head.next = p2;
                p2 = p2.next;
            }
            head = head.next;
        }
        //最后别忘了接剩余的部分
        if(p1 != null){
            head.next = p1;
        }
        else if(p2 != null){
            head.next = p2;
        }
        return dummy.next;
    }
}

复杂度分析和test case

复杂度是O(n)吧,好像链表题目不多有其余复杂度的,只有扫一遍,扫两遍,扫大街的区别。设计

在test case设计的时候,先找个正常的,好比1->32->4的组合。而后能够验证空的node可否跑通,就是l1是null,或l2是null,或两个都是null。还有一个链表很小,另外一个很大。好比1->25->6->7->8这样。这些差很少了吧。指针

备注

其实这道题就是用来开启Google面经这个标签的,准备今年9月投一下Google,尽早准备。我是今年秋天要放飞理想的有志青年,面对众多IT公司对转行者的歧视,大家尽管一块儿上,何惧操,随便射。code

相关文章
相关标签/搜索