省空间的方法是修改链表指针,不引入新的链表节点。
public static void main(String[] args) {
ListNode node1 = new ListNode(1);
ListNode node2 = new ListNode(2);
ListNode node3 = new ListNode(4);
node1.next = node2;
node2.next = node3;
ListNode node11 = new ListNode(1);
ListNode node22= new ListNode(3);
ListNode node33 = new ListNode(4);
node11.next = node22;
node22.next = node33;
//ListNode head = mergeTwoLists2(node1, node11);
ListNode head2 = mergeTwoLists(node1, node11);
}
public static ListNode mergeTwoLists2(ListNode l1, ListNode l2) {
if(l1 == null) return l2;
if(l2 == null) return l1;
ListNode cur1 = l1;
ListNode cur2 = l2;
ListNode head = new ListNode(-1);
ListNode tail = head;
while(cur1 !=null && cur2!=null){
if(cur1.val<cur2.val){
tail.next = new ListNode(cur1.val);
cur1 = cur1.next;
}else {
tail.next = new ListNode(cur2.val);
cur2 = cur2.next;
}
tail = tail.next;
}
if(cur1 == null){
tail.next = cur2;
}
else {
tail.next= cur1;
}
return head.next;
}
public static ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1 == null) return l2;
if(l2 == null) return l1;
ListNode cur1 = l1.val <= l2.val? l1: l2;
ListNode cur2 = cur1 == l1 ?l2 : l1;
ListNode head = cur1;
ListNode pre= null;
ListNode next = cur1.next;
while(cur1!=null && cur2!=null){
if(cur1.val<= cur2.val){
pre = cur1;
cur1 = next;
if(next != null){
next = next.next;
}
}
else {
pre.next = cur2;
cur2 = cur2.next;
pre.next.next = cur1;
pre = pre.next;
;
}
}
if(cur1 == null ){
pre.next = cur2;
}
return head;
}
public static class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}