剑指offer——合并两个排序的链表
Posted 茕&茕
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer——合并两个排序的链表相关的知识,希望对你有一定的参考价值。
题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
代码实现(Java)
方案一:递归方法
1 /* 2 public class ListNode { 3 int val; 4 ListNode next = null; 5 6 ListNode(int val) { 7 this.val = val; 8 } 9 }*/ 10 public class Solution { 11 public ListNode Merge(ListNode list1,ListNode list2) { 12 if(list1==null){ 13 return list2; 14 }else if(list2==null){ 15 return list1; 16 } 17 ListNode mergeListNode=null; 18 if(list1.val<list2.val){ 19 mergeListNode=list1; 20 mergeListNode.next=Merge(list1.next,list2); 21 }else{ 22 mergeListNode=list2; 23 mergeListNode.next=Merge(list1,list2.next); 24 } 25 return mergeListNode; 26 } 27 }
方案二:非递归方法
1 public static ListNode merge(ListNode head1, ListNode head2) { 2 if (head1 == null) { 3 return head2; 4 } 5 6 if (head2 == null) { 7 return head1; 8 } 9 10 ListNode root = new ListNode(); 11 // 用于指向合并后的新链的尾结点 12 ListNode pointer = root; 13 14 // 当两个链表都不为空就进行合并操作 15 while (head1 != null && head2 != null) { 16 if (head1.value < head2.value) { 17 pointer.next = head1; 18 head1 = head1.next; 19 } else { 20 pointer.next = head2; 21 head2 = head2.next; 22 } 23 pointer = pointer.next; 24 } 25 26 // 如果第一个链表的元素未处理完将其,接到合并链表的最后一个结点之后 27 if (head1 != null) { 28 pointer.next = head1; 29 } 30 31 // 如果第二个链表的元素未处理完将其,接到合并链表的最后一个结点之后 32 if (head2 != null) { 33 pointer.next = head2; 34 } 35 return root.next; 36 }
以上是关于剑指offer——合并两个排序的链表的主要内容,如果未能解决你的问题,请参考以下文章