【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

相關文章
相關標籤/搜索