image.png
    省空间的方法是修改链表指针,不引入新的链表节点。

    1. public static void main(String[] args) {
    2. ListNode node1 = new ListNode(1);
    3. ListNode node2 = new ListNode(2);
    4. ListNode node3 = new ListNode(4);
    5. node1.next = node2;
    6. node2.next = node3;
    7. ListNode node11 = new ListNode(1);
    8. ListNode node22= new ListNode(3);
    9. ListNode node33 = new ListNode(4);
    10. node11.next = node22;
    11. node22.next = node33;
    12. //ListNode head = mergeTwoLists2(node1, node11);
    13. ListNode head2 = mergeTwoLists(node1, node11);
    14. }
    15. public static ListNode mergeTwoLists2(ListNode l1, ListNode l2) {
    16. if(l1 == null) return l2;
    17. if(l2 == null) return l1;
    18. ListNode cur1 = l1;
    19. ListNode cur2 = l2;
    20. ListNode head = new ListNode(-1);
    21. ListNode tail = head;
    22. while(cur1 !=null && cur2!=null){
    23. if(cur1.val<cur2.val){
    24. tail.next = new ListNode(cur1.val);
    25. cur1 = cur1.next;
    26. }else {
    27. tail.next = new ListNode(cur2.val);
    28. cur2 = cur2.next;
    29. }
    30. tail = tail.next;
    31. }
    32. if(cur1 == null){
    33. tail.next = cur2;
    34. }
    35. else {
    36. tail.next= cur1;
    37. }
    38. return head.next;
    39. }
    40. public static ListNode mergeTwoLists(ListNode l1, ListNode l2) {
    41. if(l1 == null) return l2;
    42. if(l2 == null) return l1;
    43. ListNode cur1 = l1.val <= l2.val? l1: l2;
    44. ListNode cur2 = cur1 == l1 ?l2 : l1;
    45. ListNode head = cur1;
    46. ListNode pre= null;
    47. ListNode next = cur1.next;
    48. while(cur1!=null && cur2!=null){
    49. if(cur1.val<= cur2.val){
    50. pre = cur1;
    51. cur1 = next;
    52. if(next != null){
    53. next = next.next;
    54. }
    55. }
    56. else {
    57. pre.next = cur2;
    58. cur2 = cur2.next;
    59. pre.next.next = cur1;
    60. pre = pre.next;
    61. ;
    62. }
    63. }
    64. if(cur1 == null ){
    65. pre.next = cur2;
    66. }
    67. return head;
    68. }
    69. public static class ListNode {
    70. int val;
    71. ListNode next;
    72. ListNode(int x) {
    73. val = x;
    74. }
    75. }