Leetcode演算法Java全解答--21. 合併兩個有序連結串列
阿新 • • 發佈:2018-11-23
Leetcode演算法Java全解答–21. 合併兩個有序連結串列
文章目錄
題目
將兩個有序連結串列合併為一個新的有序連結串列並返回。新連結串列是通過拼接給定的兩個連結串列的所有節點組成的。
示例:
輸入:1->2->4, 1->3->4 輸出:1->1->2->3->4->4
想法
宣告結果連結串列C,同時遍歷2個連結串列A和B,
比對2個連結串列當前值的資料大小,
如果A比B小,就往結果連結串列C中賦值,然後A連結串列往前走
反之則B連結串列往前走
複雜度n/n
結果
超過99%的測試案例
複雜度n/n
總結
程式碼
我的答案
/************************************** * 題目 * 將兩個有序連結串列合併為一個新的有序連結串列並返回。新連結串列是通過拼接給定的兩個連結串列的所有節點組成的。 * * 示例: * * 輸入:1->2->4, 1->3->4 * 輸出:1->1->2->3->4->4 **************************************/ /************************************** * * 想法: * * 宣告結果連結串列C,同時遍歷2個連結串列A和B, * 比對2個連結串列當前值的資料大小, * 如果A比B小,就往結果連結串列C中賦值,然後A連結串列往前走 * 反之則B連結串列往前走 * * * 我的做法 * 超過99%的測試案例 * * ***********************************/ public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if (l1 == null) { return l2; } if (l2 == null) { return l1; } ListNode result = new ListNode(0); ListNode cur = result; ListNode cur1 = l1; ListNode cur2 = l2; if (cur1.val < cur2.val) { cur.val = cur1.val; cur1 = cur1.next; } else { cur.val = cur2.val; cur2 = cur2.next; } while (cur1 != null || cur2 != null) { if (cur1 == null) { cur.next = cur2; return result; } if (cur2 == null) { cur.next = cur1; return result; } if (cur1.val < cur2.val) { cur.next = cur1; cur1 = cur1.next; } else { cur.next = cur2; cur2 = cur2.next; } cur = cur.next; } return result; }
大佬們的答案
public ListNode better(ListNode l1, ListNode l2) { ListNode result = new ListNode(0); ListNode tmp = result; while (l1 != null && l2 != null) { if (l1.val < l2.val) { tmp.next = l1; l1 = l1.next; tmp = tmp.next; } else { tmp.next = l2; l2 = l2.next; tmp = tmp.next; } } if (l1 == null) { tmp.next = l2; } if (l2 == null) { tmp.next = l1; } return result.next; }
測試用例
@Test
public void test021() {
ListNode listNode11 = new ListNode(1);
ListNode listNode12 = new ListNode(2);
ListNode listNode13 = new ListNode(4);
listNode11.next = listNode12;
listNode12.next = listNode13;
ListNode listNode21 = new ListNode(1);
ListNode listNode22 = new ListNode(3);
ListNode listNode23 = new ListNode(4);
listNode21.next = listNode22;
listNode22.next = listNode23;
// 測試案例期望值
ListNode expResult1 = new ListNode(1);
ListNode expResult12 = new ListNode(1);
ListNode expResult13 = new ListNode(2);
ListNode expResult15 = new ListNode(3);
ListNode expResult16 = new ListNode(4);
ListNode expResult17 = new ListNode(4);
expResult1.next = expResult12;
expResult12.next = expResult13;
expResult13.next = expResult15;
expResult15.next = expResult16;
expResult16.next = expResult17;
Solution021 solution021 = new Solution021();
ListNode result1 = solution021.mergeTwoLists(listNode11, listNode21);
Assert.assertEquals(expResult1.toArray(), result1.toArray());
}
其他
程式碼託管碼雲地址:https://gitee.com/lizhaoandroid/LeetCodeAll.git
檢視其他內容可以點選專欄或者我的部落格哈:https://blog.csdn.net/cmqwan
“大佬們的答案” 標籤來自leetcode,侵權請聯絡我進行刪改
如有疑問請聯絡,聯絡方式:QQ3060507060