合并两个排序的链表-剑指Offer(Java语言)
2019-02-25 07:58
281 查看
题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
思路
方法一:非递归
- 比较链表1的第一个结点与链表2的第一个结点,将小的那个拿出来作为新链表的第一个结点
- 假设链表1的第一个结点更小,继续比较链表1的第二个结点与链表2的第一个结点,将小的那个拿出来作为新链表的第二个结点
- 以此类推直到其中一个链表全部拿走,将另一个链表剩余的结点加到新链表的尾部
具体实现时,为了不用特殊处理新链表的第一个结点,考虑新增一个头结点。
[code]/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Solution { public ListNode Merge(ListNode list1,ListNode list2) { if(list1==null) return list2;//若其中一个链表为null,则结果为另一个链表 if(list2==null) return list1; ListNode head=new ListNode(0);//新增头结点 //因为要最后返回头结点的下一个结点,所以需要保留头结点的引用,这里用新变量来做循环 ListNode p=head; while(list1!=null&&list2!=null){ if(list1.val<=list2.val){ p.next=list1; p=p.next; list1=list1.next; }else{ p.next=list2; p=p.next; list2=list2.next; } } //将剩余的一个链表添加到新链表尾部 if(list1!=null) p.next=list1; if(list2!=null) p.next=list2; return head.next;//返回头结点的下一个结点 } }
方法二:递归
递归思路:
- 比较链表1的第一个结点与链表2的第一个结点,假设链表1的第一个结点更小,则该结点为新链表的结点
- 递归处理链表1的第二个结点与链表2的第一个结点
[code]/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Solution { public ListNode Merge(ListNode list1,ListNode list2) { if(list1==null) return list2; if(list2==null) return list1; if(list1.val<list2.val){ list1.next=Merge(list1.next,list2); return list1; }else{ list2.next=Merge(list1,list2.next); return list2; } } }
相关文章推荐
- 剑指offer-chapter3-面试题17-合并两个排序的链表(java)
- 《剑指offer》编程题java实现(十七):合并两个排序的链表
- 剑指offer面试题25:合并两个排序的链表(Java 实现)
- JAVA实现合并两个排序的链表(《剑指offer》)
- 剑指offer题解【合并两个排序的链表】-java
- 剑指Offer(Java版):合并两个排序的链表
- JAVA实现合并两个排序的链表(《剑指offer》)
- 《剑指offer》牛客网java题解-合并两个排序的链表
- 剑指Offer——合并两个排序的链表
- 剑指offer--面试题25:合并两个排序的链表
- 剑指offer——合并两个排序的链表
- 剑指offer(十六)合并两个排序的链表
- 《剑指offer》面试题17:合并两个排序的链表
- 《剑指Offer》面试题:合并两个排序的链表
- (剑指Offer)面试题17:合并两个排序的链表
- 剑指Offer之合并两个排序的链表
- 合并两个排序的链表java实现
- 剑指offer之面试题17:合并两个排序的链表
- 【剑指offer系列】 合并两个排序的链表___17
- 剑指offer:合并两个排序的链表