LintCode 合并两个排序链表
2017-08-28 10:19
211 查看
题目
将两个排序链表合并为一个新的排序链表 样例 给出 1->3->8->11->15->null,2->null, 返回 1->2->3->8->11->15->null。
//Definition for ListNode. public class ListNode { int val; ListNode next; ListNode(int val) { this.val = val; this.next = null; } }
思路
如果两个链表任一为空,则返回另一个。如果都为空,直接返回空。定义一个新链表,用于存储合并后的链表。
比较两个链表,把其中链表值较小的存入新链表中,链表后移。
如果其中一个链表已经移到到链表末尾,则将另一个链表剩余的部分直接存储到新链表。
返回新链表。
因为本题没有时间与空间限制,所以递归与非递归都可以顺利通过。
递归实现
//递归 public ListNode mergeTwoLists1(ListNode l1, ListNode l2) { if (l1 == null) return l2; if (l2 == null) return l1; //新链表,记录合并 ListNode node = null; //比较链表值 if (l1.val < l2.val) { //存储较小的 node = l1; //递归,移动指针 node.next = mergeTwoLists(l1.next, l2); } else { //存储较小的 node = l2; //递归,移动指针 node.next = mergeTwoLists(l1, l2.next); } return node; }
非递归
//非递归,占用内存小 public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if (l1 == null) return l2; if (l2 == null) return l1; //记录合并链表,初始化 ListNode newNode = new ListNode(-1); //合并链表的指针 ListNode node = newNode; while (l1 != null && l2 != null) { //比较链表值,存储较小的,然后移动指针 if (l1.val < l2.val) { node.next = l1; l1 = l1.next; } else { node.next = l2; l2 = l2.next; } // 将指针移动到合并后链表的结尾 node = node.next; } // 如果第一个链表的元素未处理完,将其接到合并链表的最后一个结点之后 if (l1 != null) { node.next = l1; } // 如果第二个链表的元素未处理完,将其接到合并链表的最后一个结点之后 if (l2 != null) { node.next = l2; } return newNode.next; }
相关文章推荐
- LintCode 合并两个排序链表
- LintCode 合并两个排序链表
- LintCode刷题阶段性总结---链表容易篇(翻转链表,删除链表重复元素,合并两个排序链表等)
- Lintcode 合并两个排序的链表
- python_lintcode_93. 平衡二叉树_165. 合并两个排序链表_453. 将二叉树拆成链表
- Lintcode 165合并两个排序链表
- LintCode-合并两个排序链表
- LintCode 165合并两个排序链表
- LintCode : 合并两个排序链表
- lintcode,合并两个排序链表
- LintCode_165_合并两个排序链表
- lintcode-合并两个排序链表 -165
- LintCode 合并两个排序链表
- lintcode 容易题 :Merge Two Sorted Lists合并两个排序链表
- 合并两个排序链表(LintCode)
- 【LintCode 简单】165. 合并两个排序链表
- 【链表】[Lintcode]合并两个排序链表
- lintcode——合并两个排序链表
- lintcode ----合并两个排序链表
- LintCode -合并两个排序链表