题目:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
方法1:暴力解法
public class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode node=new ListNode(-1);//定义一个虚拟节点
ListNode tmp=node;//tmp标记此虚拟节点
while(l1!=null&&l2!=null){
if(l1.val<l2.val){
tmp.next=l1;
l1=l1.next;
tmp=tmp.next;
}else{
tmp.next=l2;
l2=l2.next;
tmp=tmp.next;
}
}
if(l1!=null){
tmp.next=l1;
}
if (l2!=null){
tmp.next=l2;
}
return node.next;//返回除虚拟节点的链表
}
}
方法2:递归法
将问题化解为子问题
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1==null){
return l2;
}
if(l2==null){
return l1;
}
if(l1.val<l2.val){
l1.next=mergeTwoLists(l1.next,l2);
return l1;
}else{
l2.next=mergeTwoLists(l1,l2.next);
return l2;
}
}
}