题目描述:

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 

 

示例 1:


输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
示例 2:

输入:l1 = [], l2 = []
输出:[]
示例 3:

输入:l1 = [], l2 = [0]
输出:[0]
 

提示:

两个链表的节点数目范围是 [0, 50]
-100 <= Node.val <= 100
l1 和 l2 均按 非递减顺序 排列

解题思路:

1.递归的思路

递归出口:两链表其中一个为空表时,则L.next=非空链表。

若L1.val(链表节点的值)<L2.val,则递归调用合并函数   Merge(L1.next,L2)

相反同上,

 1 /**
 2  * Definition for singly-linked list.
 3  * public class ListNode {
 4  *     int val;
 5  *     ListNode next;
 6  *     ListNode() {}
 7  *     ListNode(int val) { this.val = val; }
 8  *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 9  * }
10  */
11 class Solution {
12     public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
13     
14         if(l1==null){
15             return l2;
16         }
17         else if(l2==null){
18             return l1;
19         }
20         else if(l1.val<l2.val){
21             l1.next=mergeTwoLists(l1.next, l2);
22             return l1;
23         }
24         else{
25             l2.next=mergeTwoLists(l1,l2.next);
26             return l2;
27         }
28 
29 
30     }
31 } 

2.迭代

设置一个节点prehead用于保存链表开头,设置preve指针从而维护next指针

 
 1 /**
 2  * Definition for singly-linked list.
 3  * public class ListNode {
 4  *     int val;
 5  *     ListNode next;
 6  *     ListNode() {}
 7  *     ListNode(int val) { this.val = val; }
 8  *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 9  * }
10  */
11 class Solution {
12     public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
13         //设置头节点,并赋值为-1
14         ListNode prehead=new ListNode(-1);
15         //设置prev节点
16         ListNode prev=prehead;
17         while(l1!=null&&l2!=null){
18             if(l1.val<=l2.val){
19                 prev.next=l1;
20                 l1=l1.next;
21             }
22             else{
23                 prev.next=l2;
24                 l2=l2.next;
25             }
26             prev=prev.next;
27         }
28         if(l1==null){
29             prev.next=l2;
30         }
31         else{
32             prev.next=l1;
33         }
34         return prehead.next;
35     }
36 }

 

posted on 2021-03-25 19:31  wxcongajiayou  阅读(33)  评论(0)    收藏  举报