将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。如 输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4]。
一般先维护一个头节点,这样可以省掉单独判断输入的两个链表是否为空。
package likouhot;
import leecodeOff.ListNode;
/*
* 21.合并两个有序链表
*/
public class Demo21 {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode headNode = new ListNode(0);
ListNode temp_l1 = l1;
ListNode temp_l2 = l2;
ListNode tail = headNode;
while(temp_l1 !=null && temp_l2 !=null) {
int val1 = temp_l1.val;
int val2 = temp_l2.val;
if(val1 < val2) {
tail.next = temp_l1;
temp_l1 = temp_l1.next;
}else {
tail.next = temp_l2;
temp_l2 = temp_l2.next;
}
tail = tail.next;
}
if(temp_l1 !=null || temp_l2!=null) {
tail.next = temp_l1==null?temp_l2:temp_l1;
}
return headNode.next;
}
public static void main(String args[]) {
Demo21 demo = new Demo21();
ListNode node1 = new ListNode(1);
ListNode node12 = new ListNode(2);
ListNode node13 = new ListNode(4);
node1.next = node12;
node12.next = node13;
ListNode node2 = new ListNode(1);
ListNode node22 = new ListNode(3);
ListNode node23 = new ListNode(4);
node2.next = node22;
node22.next = node23;
ListNode newNode = demo.mergeTwoLists(node1, node2);
while(newNode!=null) {
System.out.println(newNode.val);
newNode = newNode.next;
}
}
}