题解 | #合并两个排序的链表#
合并两个排序的链表
http://www.nowcoder.com/practice/d8b6b4358f774294a89de2a6ac4d9337
/*
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;
}
}
查看24道真题和解析