思路:头结点,双指针
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param l1 ListNode类
* @param l2 ListNode类
* @return ListNode类
*/
public ListNode mergeTwoLists (ListNode l1, ListNode l2) {
// write code here
if(l1==null && l2==null)
return null;
if(l1==null)
return l2;
if(l2==null)
return l1;
ListNode head=new ListNode(0);
ListNode cur=head;
while(l1!=null && l2!=null)
{
if(l1.val>=l2.val)
{
cur.next=l2;
cur=cur.next;
l2=l2.next;
}
else
{
cur.next=l1;
cur=cur.next;
l1=l1.next;
}
}
if(l1==null)
{
cur.next=l2;
}
else
cur.next=l1;
return head.next;
}
}
时间复杂度 o(n+m)nm为两链表长度
空间复杂度o(1) 节点引用 head , cur 使用常数大小的额外空间
总结:题目不难,没想到用头结点
第二遍:注意边界条件是>=或者<= 不是>或<