将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
代码要求:
/**
* Definition for singly-linked list.
* * public class ListNode {
* * int val;
* * ListNode next;
* * ListNode(int x) { val = x; }
* * }
* */
代码实现:
public class LinkedListTest{
static class ListNode{
int val;
ListNode next;
public ListNode(int val) {
this.val=val;
}
}
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1==null) {
//链表l1为空时,直接返回链表l2
return l2;
}
if(l2==null) {
return l1;
}
ListNode newHead=new ListNode(-1);
ListNode newTail=newHead;
ListNode cur1=l1;
ListNode cur2=l2;
while(cur1!=null&&cur2!=null) {
if(cur1.val<cur2.val) {
newTail.next=new ListNode(cur1.val);
newTail=newTail.next;
cur1=cur1.next;
}else {
newTail.next=new ListNode(cur2.val);
newTail=newTail.next;
cur2=cur2.next;
}
}
//此时cur1和cur2中有一个到链表结尾
//把没有到末尾的链表剩下的元素直接插入到新链表的末尾节点
if(cur1==null) {
newTail.next=cur2;
}
if(cur2==null) {
newTail.next=cur1;
}
return newTail.next;
}
}