题目:
    将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
    示例:
    21.合并两个有序链表 - 图1

    输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4]

    解法:
    创建一个新的链表来存储合并之后的链表,即定义一个新的头指针和cur指针(指向当前节点)。如果两个链表的当前节点都不为空时才进行合并操作。如果l1链表的值小于等于l2链表的值,那么cur指针的next就指向l1的当前节点。如果l1链表的值大于l2链表的值,那么cur指针的next就指向l2的当前节点。合并完成以后,因为两个链表不一定等长,所以如果l1链表的当前节点为null,那么就直接把cur的next指向l2,反之指向l1(循环结束之后至少有一个链表的当前节点会指向null,所以只有两种情况)

    代码:

    1. /**
    2. * Definition for singly-linked list.
    3. * public class ListNode {
    4. * int val;
    5. * ListNode next;
    6. * ListNode() {}
    7. * ListNode(int val) { this.val = val; }
    8. * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
    9. * }
    10. */
    11. class Solution {
    12. public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
    13. ListNode prehead = new ListNode(-1);
    14. ListNode cur = prehead;
    15. while(l1 != null && l2 != null){
    16. if(l1.val <= l2.val){
    17. cur.next = l1;
    18. l1 = l1.next;
    19. }
    20. else{
    21. cur.next = l2;
    22. l2 = l2.next;
    23. }
    24. cur = cur.next;
    25. }
    26. cur.next = l1 == null?l2:l1;
    27. return prehead.next;
    28. }
    29. }