剑指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——合并两个排序的链表的主要内容,如果未能解决你的问题,请参考以下文章

《剑指Offer——合并两个排序的链表,两个链表的第一个公共节点》代码

剑指offer 16.合并两个排序的链表

剑指offer——合并两个排序的链表

剑指OFFER合并两个排序的链表

[剑指offer]面试题17:合并两个排序的链表

剑指offer-合并两个排序的链表