合并两个有序链表

QUESTION:

将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例:

输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4

EXPLANATION:

采用双指针的方式,哪个数值比较小,那么就将该值添加到结果linkedlist的后面。
逻辑:
1.判断两个链表当前的头数值大小
2.将小的结果放在结果链表后面,同时小链表头指针往后移一格
3.重复1-2,直到两个链表都为null 可以优化的地方,如果其中一个链表已经都整理完了,那么可以直接将另外一个链表贴在后面。

SOLUTION:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        ListNode head= new ListNode(0);
        ListNode tmp = head;
        while (l1!=null || l2!=null){
            int l1val = l1==null?Integer.MAX_VALUE:l1.val;
            int l2val = l2==null?Integer.MAX_VALUE:l2.val;
            ListNode node;
            if(l1val>l2val){
                node = new ListNode(l2.val);
                l2 = l2.next;
            }else{
                node = new ListNode(l1.val);
                l1 = l1.next;
            }
            head.next = node;
            head = head.next;
        }
        return tmp.next;
    }
}