1 public ListNode Merge(ListNode list1, ListNode list2) {
2 // list1,list2中,只要有一个是空的,则返回另外一个链表
3 if (list1 == null) {
4 return list2;
5 }
6 if (list2 == null) {
7 return list1;
8 }
9 // 新建一个链表
10 ListNode k = new ListNode(Integer.MIN_VALUE);
11 // 新建一个头指针,指向新建的链表
12 ListNode head = k;//k其实是用来迭代合并之后的链表
13 // p指针用来迭代list1,q指针用来迭代list2
14 ListNode p = list1, q = list2;
15 while (p != null && q != null) {
16 // 哪一个值小,k就指向谁
17 if (p.val > q.val) {
18 k.next = q;
19 k = q;
20 q = q.next;//往后移动
21 } else {
22 k.next = p;
23 k = p;
24 p = p.next;//往后移动
25 }
26 }
27 // 最终如果q提前结束(q==null),p不为空,则直接把p挂到k的后面
28 if (p != null) {
29 k.next = p;
30 }
31 // 最终如果q提前结束(p==null),q不为空,则直接把q挂到k的后面
32 if (q != null) {
33 k.next = q;
34 }
35 // 真正的头节点是原来新建k节点的下一个节点,因为k是新建的节点,
36 // 合并之后,k节点其实不属于最终合并之后的链表
37 return head.next;
38 }