LeetCode演算法21:java 合併兩個有序連結串列
阿新 • • 發佈:2018-12-25
問題
將兩個有序連結串列合併為一個新的有序連結串列並返回。新連結串列是通過拼接給定的兩個連結串列的所有節點組成的。
示例:
輸入:1->2->4, 1->3->4
輸出:1->1->2->3->4->4
思路
思路較為簡單,難度在與對兩個連結串列的各種邊界情況的處理。
程式碼
//import utils.delwithNodeList; //import utils.ListNode; import Utils.*; public class _21MergeTwoSortedLists{ public ListNode mergeTwoLists(ListNode L1,ListNode L2){ ListNode head = null; ListNode tmp = null; while(L1!=null||L2!=null){ if(L1!=null&&L2!=null){ if(L1.val>=L2.val){ if(tmp==null){ tmp = L2; head = tmp; L2 = L2.next; }else{ tmp.next = L2; tmp = tmp.next; L2 = L2.next; } }else{ if(tmp==null){ tmp = L1; head = tmp; L1 = L1.next; }else{ tmp.next = L1; tmp = tmp.next; L1 = L1.next; } } }else if(L1!=null&&L2==null){ if(tmp==null){ tmp = L1; head = tmp; return head; }else{ tmp.next = L1; return head; } }else{ if(tmp==null){ tmp = L2; head = tmp; return head; }else{ tmp.next = L2; return head; } } } return head; } private ListNode addNode(ListNode head,ListNode tmp,ListNode L){ if(tmp==null){ tmp = L; head = tmp; tmp = tmp.next; L = L.next; }else{ tmp = L; tmp = tmp.next; L = L.next; } System.out.println("hello1"); //System.out.println(delwithListNode.readList(L2)); System.out.println(delwithListNode.readList(head)); System.out.println("hello1"); return L; } public static void main(String[] arg){ //ListNode L1 = delwithListNode.getNodelist(new int[]{1,2,4}); //ListNode L2 = delwithListNode.getNodelist(new int[]{1,3,4}); ListNode L1 = delwithListNode.getNodelist(new int[]{1,3}); ListNode L2 = delwithListNode.getNodelist(new int[]{5,7}); String list1 = delwithListNode.readList(L1); String list2 = delwithListNode.readList(L2); System.out.println(list1); System.out.println(list2); _21MergeTwoSortedLists MergeTwoSortedLists = new _21MergeTwoSortedLists(); ListNode L3 = MergeTwoSortedLists.mergeTwoLists(L1,L2); String list = delwithListNode.readList(L3); System.out.println(list); } }