21. Merge Two Sorted Lists && 23. Merge k Sorted Lists
2016-04-12 13:15
495 查看
21. Merge Two Sorted Lists
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.Hide Tags
Linked List
Hide Similar Problems
(H) Merge k Sorted Lists (E) Merge Sorted Array (M) Sort List (M) Shortest Word Distance II
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if(l1 == null) return l2; if(l2 == null) return l1; ListNode dummy = new ListNode(0); ListNode rc = dummy; while(l1 !=null && l2 !=null) { if(l1.val<l2.val) { rc.next = l1; l1 = l1.next; } else { rc.next = l2; l2 = l2.next; } rc = rc.next; } if(l1 == null) rc.next = l2; else rc.next = l1; return dummy.next; } }
23. Merge k Sorted Lists
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.Hide Tags
Divide and Conquer Linked List Heap
Hide Similar Problems
(E) Merge Two Sorted Lists (M) Ugly Number II
Divide and Conquer solution:
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ public class Solution { public ListNode mergeKLists(ListNode[] lists) { return mergeKLists(lists, 0, lists.length - 1); } //[from, to] public ListNode mergeKLists(ListNode[] lists, int from, int to) { if (from > to) return null; if (from == to) return lists[from]; if (to - from == 1) { ListNode left = lists[from]; ListNode right = lists[to]; return merge2Lists(left, right); } else { int mid = (from + to) / 2; ListNode leftMerged = mergeKLists(lists, from, mid); ListNode rightMerged = mergeKLists(lists, mid + 1, to); return merge2Lists(leftMerged, rightMerged); } } private ListNode merge2Lists(ListNode l1, ListNode l2) { if (l1 == null) return l2; if (l2 == null) return l1; ListNode fake = new ListNode(0); ListNode current = fake; while (l1 != null && l2 != null) { if (l1.val <= l2.val) { current.next = l1; l1 = l1.next; } else { current.next = l2; l2 = l2.next; } current = current.next; } if (l1 != null) current.next = l1; if (l2 != null) current.next = l2; return fake.next; } }
相关文章推荐
- C#文件操作
- 交换两个整型变量其实并不需要第三者
- Cookie和Session专题
- ToolBar、ActionBar与Menu的纠葛(以及navigationIcon、setHomeButtonEnabled、setDisplayHomeAsUpEnabled)
- 游戏评测表
- 自用,java判断是否闰年
- 04-git远程库克隆
- UVA10025
- 【ZOJ3935 The 16th Zhejiang University Programming ContestI】【暴力 水题】2016 找寻triangular-hexagonal-leap y
- 谈谈关于域名的那些事
- 创建属于自己的网站
- Oracle11g RMAN 丢失归档日志:ORA-19625
- c++作业3
- 【ZOJ3933 The 16th Zhejiang University Programming ContestG】【费用流】Team Formation 最多组队条件下女
- 【程序的流程】—— 顺序 / 分支 / 循环
- MySQL Flush命令用法
- Linux关闭iptables以及selinux
- 【ZOJ3932 The 16th Zhejiang University Programming ContestF】【水题】Handshakes 每人与之前认识的人握手 最大可能认识人数
- 解决iOS开发中删除Main.storyboard后黑屏的现象
- Shell字符串比较