【Java】 面试题25:合并两个排序的链表
2019-03-14 15:00
351 查看
题目:输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然使递增排序的。
题目分析
假如List1中的头节点是小于List2中的,那么新的链表的头节点必将是List1的头节点,同理对List2也一样,那么在比较完头节点之后,再将List1中的下一个节点再与List2中的头节点比较,同样谁小谁进入新链表,然后再比较,直到两个链表比较完,故可用非递归或递归两种方式来做。
递归求解:
package jianZhiOffer; /* * 面试题25:合并两个排序的链表 * 题目:输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然使递增排序的。 */ public class Demo25 { public static ListNode Merge(ListNode pHead1,ListNode pHead2) { if(pHead1 == null) return pHead2; else if(pHead2 == null) return pHead1; ListNode pMergedHead = null; if(pHead1.val < pHead2.val) { pMergedHead = pHead1; pMergedHead.next = Merge(pHead1.next,pHead2); }else { pMergedHead = pHead2; pMergedHead.next = Merge(pHead1,pHead2.next); } return pMergedHead; } private static void printNodeList(ListNode head) { if(head == null) return ; ListNode node = head.next.next; while(node !=null) { System.out.print(node.val); node = node.next; if(node != null) System.out.print("->"); } } public static void main(String[] args) { int[] num1 = {1,3,5,7}; int[] num2 = {2,4,6,8}; ListNode head1 = new ListNode(); ListNode pre1 = head1; for(int i=0;i<num1.length;i++) { ListNode node = new ListNode(num1[i]); pre1.next = node; pre1 = node; } ListNode head2 = new ListNode(); ListNode pre2 = head2; for(int i=0;i<num2.length;i++) { ListNode node = new ListNode(num2[i]); pre2.next = node; pre2 = node; } ListNode merge = Merge(head1,head2); printNodeList(merge); } }
相关文章推荐
- 剑指offer面试题25:合并两个排序的链表(Java 实现)
- 剑指offer面试题25:合并两个排序的链表-java
- 剑指Offer 面试题25:合并两个排序的链表(递归+非递归) Java代码实现
- 【剑指offer】面试题 25:合并两个排序的链表
- 剑指offer-chapter3-面试题17-合并两个排序的链表(java)
- 剑指offer--面试题25:合并两个排序的链表
- 剑指Offer面试题17(Java版):合并两个排序的链表
- 剑指面试题25-合并两个排序的链表
- 【剑指offer】面试题25:合并两个排序的链表
- 剑指offer面试题25:合并两个排序的链表(c++ 递归+非递归)
- 剑指Offer面试题25:合并两个排序的链表
- 剑指offer 面试题17 合并两个排序的链表-Java实现
- 剑指Offer面试题17(Java版):合并两个排序的链表
- 面试题7:合并两个排序的链表(java)
- 剑指Offer--面试题17:合并两个排序的链表--Java实现
- 面试题25:合并两个排序的链表
- OK 面试题25:合并两个排序的链表
- 剑指offer——面试题17:合并两个排序的链表(非递归方法和递归方法)
- 面试题17:合并两个排序的链表
- 剑指Offer面试题:16.合并两个排序的链表