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 }

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。