時間是2016年7月21日,MTV onsite,第三輪,第一題。html
參考leetcode的第21題,要求很簡單,將兩個排好序的鏈表合併成一個新的排好序鏈表。1->2->5
和3->4->6
兩個輸入值,獲得1->2->3->4->5->6
。這題簡單的就像小時候動畫片結束以後的有獎問答。node
兩個鏈表各起一個指針,再建一個head指針,用來尋找下一個排好序的值。必需要說,這題須要對鏈表這種結構的熟悉,動畫片的有獎競猜也是要看動畫片的。動畫
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; } }
複雜度是O(n)吧,好像鏈表題目不多有其餘複雜度的,只有掃一遍,掃兩遍,掃大街的區別。設計
在test case設計的時候,先找個正常的,好比1->3
,2->4
的組合。而後能夠驗證空的node可否跑通,就是l1是null,或l2是null,或兩個都是null。還有一個鏈表很小,另外一個很大。好比1->2
,5->6->7->8
這樣。這些差很少了吧。指針
其實這道題就是用來開啓Google面經這個標籤的,準備今年9月投一下Google,儘早準備。我是今年秋天要放飛理想的有志青年,面對衆多IT公司對轉行者的歧視,大家儘管一塊兒上,何懼操,隨便射。code