/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Solution { public ListNode Merge(ListNode list1,ListNode list2) { if(list1 == null){ return list2; } if(list2 == null){ return list1; } //取两个头节点较小的作为新的头 ListNode newHead = list1; if(list2.val < list1.val){ newHead = list2; list2 = list2.next; } else { list1 = list1.next; } //头部留着用来返回 在来一个节点来实现拼接 不断指向尾部的节点 ListNode tail = newHead; while(list1 != null && list2 != null){ if(list1.val <= list2.val){ tail.next = list1; list1 = list1.next; } else { tail.next = list2; list2 = list2.next; } tail = tail.next; } //跳出循环后把不为空的那个链表剩下的部分在拼到后面 因为本身就是单调递增,通过上面的判断剩下的一定是比较大的部分 if(list1 == null){ tail.next = list2; } if(list2 == null){ tail.next = list1; } return newHead; } }