leetcode面试题25. 合并两个排序的链表
2020-03-31 19:32
761 查看
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例1:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
解题过程:
感觉有点像归并排序的merge的过程,就试着写写,结果就做出来了!
class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if(l1==null&&l2==null){ return null; } if(l1==null){ return l2; } if(l2==null){ return l1; } ListNode node1=l1; ListNode node2=l2; ListNode root; if(node1.val<=node2.val){ root = new ListNode(node1.val); node1 = node1.next; }else{ root = new ListNode(node2.val); node2=node2.next; } ListNode node = root; while(node1!=null&&node2!=null){ if(node1.val<=node2.val){ node.next = new ListNode(node1.val); node1 = node1.next; node = node.next; }else{ node.next = new ListNode(node2.val); node2=node2.next; node = node.next; } } while(node1!=null){ node.next = new ListNode(node1.val); node1 = node1.next; node = node.next; } while(node2!=null){ node.next = new ListNode(node2.val); node2 = node2.next; node = node.next; } return root; } }
然后就去看大佬的答案嘛,发现果然我写的有点啰嗦,可以优化,哎,我何时才能和他们一样厉害!
优化后的代码:
class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if(l1==null&&l2==null){ return null; } if(l1==null){ return l2; } if(l2==null){ return l1; } ListNode head = new ListNode(-1); ListNode cur = head; while(l1!=null&&l2!=null){ if(l1.val<=l2.val){ cur.next = l1; l1 = l1.next; }else{ cur.next = l2; l2 = l2.next; } cur = cur.next; } if(l1!=null){ cur.next = l1; } if(l2!=null){ cur.next = l2; } return head.next; } }
最大优化的地方就是它使用了一个伪头节点,这个概念以前碰到过,但是没想起来。。。。得记住一下!还有就是最后两个while它换成了if,对,这个确实可以哎。。
另外还有一种递归更简单:
class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if (l1 == null) return l2; if (l2 == null) return l1; if(l1.val<l2.val){ l1.next = mergeTwoLists(l1.next,l2); return l1; }else{ l2.next = mergeTwoLists(l1,l2.next); return l2; } } }
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- leetcode面试题——面试题25. 合并两个排序的链表
- 【Golang】LeetCode-剑指Offer-面试题25-合并两个排序的链表【两种解法】
- 牛客剑指Offer面试题25:合并两个排序的链表
- 剑指Offer面试题25:合并两个排序的链表
- 剑指offer--面试题25:合并两个排序的链表
- 【剑指offer】面试题25-合并两个排序的链表
- 面试题25:合并两个排序的链表
- 【剑指offer】面试题25:合并两个排序的链表
- OK 面试题25:合并两个排序的链表
- 剑指offer面试题25:合并两个排序的链表-java
- 【剑指offer】面试题 25:合并两个排序的链表
- 《剑指offer》面试题25:合并两个排序的链表(C++实现)
- 剑指offer面试题25:合并两个排序的链表(Java 实现)
- 剑指offer面试题25:合并两个排序的链表(c++ 递归+非递归)
- 【Java】 面试题25:合并两个排序的链表
- 剑指Offer 面试题25:合并两个排序的链表(递归+非递归) Java代码实现
- 剑指面试题25-合并两个排序的链表
- 面试题24:反转链表 & 面试题25:合并两个排序链表
- 面试题25. 合并两个排序的链表
- 面试题17 合并两个排序链表