题目
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
解法一:双指针
新建一个头节点,每次比对哪个小连接哪一个就好,如果一个为空就连另一个
class Solution {
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
ListNode head = new ListNode();
ListNode p = head;
while(list1 != null || list2 != null){
if(list1 == null){
p.next = list2;
list2 = list2.next;
}
else if(list2 == null){
p.next = list1;
list1 = list1.next;
}
else{
if(list1.val <= list2.val){
p.next = list1;
list1 = list1.next;
}
else if(list1.val > list2.val){
p.next = list2;
list2 = list2.next;
}
}
p = p.next;
}
return head.next;
}
}
解法二:递归
class Solution {
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
//寻找递归终止条件,有一方为空则终止,让head的next直接指向另一方
if(list1 == null){
return list2;
}
if(list2 == null){
return list1;
}
//对于每个结点先找到小结点
ListNode head = (list1.val > list2.val ? list2:list1);
//然后该节点的下一个结点为下一个小结点
head.next = mergeTwoLists(head.next,head == list1?list2:list1);
//最后返回该节点
return head;
}
}