题干:
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4]
public class 合并两个有序链表 {
public static void main(String[] args) {
int[] l1 = {1,2,4};
int[] l2 = {1,3,4};
ListNode l1Head = createList(l1);
ListNode l2Head = createList(l2);
ListNode ansHead = mergeTwoLists(l1Head.next,l2Head.next);
while (ansHead!=null){
System.out.println(ansHead.val);
ansHead = ansHead.next;
}
}
public static class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
public static ListNode createList(int[] nums){
ListNode head = new ListNode();
ListNode point = head;
for(int i:nums){
ListNode newNode = new ListNode(i);
point.next= newNode;
point = newNode;
}
return head;
}
public static 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;
}
}
}
将数组创建成链表,然后调用mergeTwoLists将两个链表合并(合并后的链表仍然保持升序),具体做法是通过比较当前节点的val来判断当前节点的next是哪个节点(递归)。