题目描述

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
 
题目链接:

 

算法:

1、递归:找到当前两个链表中较小的节点,子问题:剩下的节点需要排序。

2、非递归

关键点:

维护合并后链表表尾位置的指针。

分析:

list1: 1->2->5->6

list2: 3->4->8

具体过程:

1、list1需要走到节点2,指向list2

2、list2走到节点4,指向list1……

3、以此类推。

 

 

 

 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     
12     public ListNode Merge(ListNode list1,ListNode list2) {
13         if(list1 == null){
14             return list2;
15         }
16         if(list2 == null){
17             return list1;
18         }
19         //找到当前较小节点,它的下一个节点,即是一个子问题
20         if(list1.val <= list2.val){
21             list1.next = Merge(list1.next,list2);
22             return list1;
23         }else{
24             list2.next = Merge(list1,list2.next);
25             return list2;
26         }
27         
28         /*
29         //某个链表为null,直接返回另一个链表
30         if(list1 == null){
31             return list2;
32         }
33         if(list2 == null){
34             return list1;
35         }
36         //调整一下,使list1始终代表头结点
37         if(list1.val > list2.val){
38             ListNode tmp = list1;
39             list1 = list2;
40             list2 = tmp;
41         }
42         ListNode head = list1;
43         ListNode cur = null;
44         while(list1!=null&&list2!=null){
45             //前面已做调整,list1较小所以从list1开始
46             //遍历list1 节点,一直找到list1上比list2当前节点大的值或者遍历到list1尾部
47             while(list1!=null&&list1.val <= list2.val){
48                 cur = list1;
49                 list1 = list1.next;
50             }
51             cur.next = list2;
52             //如果list1遍历完,则合并结束
53             if(list1 == null){
54                 break;
55             }
56             //遍历list2 节点,一直找到list2上比list1当前节点大的值或者遍历到list2尾部
57             while(list2!=null&&list2.val <= list1.val){
58                 cur = list2;
59                 list2  = list2.next;
60             }
61             cur.next = list1;
62             //如果list2遍历完,则合并结束
63             if(list2 == null){
64                 break;
65             }
66             
67         }
68         return head;
69         */
70     }
71     
72    
73 }

 

posted on 2020-06-05 16:08  MoonBeautiful  阅读(127)  评论(0编辑  收藏  举报