剑指offer面试17 合并两个排序的链表
2017-07-07 12:05
459 查看
一、题目
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。二、分析
如果链表1为空,将输出链表2;如果链表2为空,将输出链表1;
如果链表1和链表2都不为空,则比较指向链表1和链表2的节点值,如果指针1的节点值小于指针2的节点值,则将输出链表的指针指向指针1;反之则将输出链表的指针指向指针2;
当链表1再次为空时,将输出链表指向指针2;
当链表2再次为空时,将输出链表指向指针1;
三、代码实现
/* * 题目: * 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 */ public class Test17 { public ListNode Merge(ListNode list1,ListNode list2) { if(list1 == null){ return list2; } if(list2 == null){ return list1; } ListNode head = null; //确定输出链表的头结点 if(list1.value < list2.value){ head = list1; list1 = list1.next; }else{ head = list2; list2 = list2.next; } ListNode temp = head; while(list1 != null && list2 != null){ if(list1.value < list2.value){ temp.next = list1; temp = temp.next; list1 = list1.next; }else{ temp.next = list2; temp = temp.next; list2 = list2.next; } } if(list1 == null){ temp.next = list2; } if(list2 == null){ temp.next = list1; } return head; } }
四、递归实现
//递归实现 public ListNode Merge2(ListNode list1,ListNode list2) { if(list1 == null){ return list2; } if(list2 == null){ return list1; } ListNode head = null; if(list1.value < list2.value){ head = list1; head.next = Merge2(list1.next, list2); }else{ head = list2; head.next = Merge2(list1, list2.next); } return head; } public void display(ListNode head){ if(head == null){ return; } ListNode temp = head; while(temp != null){ System.out.print(temp.value+","); temp = temp.next; } }
相关文章推荐
- 剑指offer-面试题17.合并两个排序的链表
- 【剑指Offer面试编程题】题目1519:合并两个排序的链表--九度OJ
- [剑指offer][面试题17]合并两个排序的链表
- 剑指offer面试题17-合并两个排序的链表
- 【剑指Offer学习】【面试题17 ::合并两个排序的链表】
- 剑指offer_面试题17_合并两个排序的链表(两种思维)
- 【剑指offer】3.4代码的鲁棒性——面试题17:合并两个排序的链表
- 剑指Offer:面试题17——合并两个排序的链表
- 【剑指offer-Java版】17合并两个排序链表
- 剑指offer 面试题17—合并两个排序的链表
- 剑指offer 面试题17 合并两个排序的链表
- 剑指offer代码解析——面试题17合并两个排序的链表
- 剑指offer-17:合并两个排序的链表
- 17.合并两个排序的链表|剑指Offer
- 【剑指Offer面试编程题】题目1519:合并两个排序的链表--九度OJ
- 剑指offer 面试题17: 合并两个排序的链表 题解
- 剑指Offer面试题17(Java版):合并两个排序的链表
- 【剑指offer 面试题17】合并两个排序的链表
- 剑指offer 17-合并两个排序表的链表
- 剑指offer之面试题17 :合并两个排序的链表