题解 | #合并两个排序的链表#
合并两个排序的链表
http://www.nowcoder.com/practice/d8b6b4358f774294a89de2a6ac4d9337
思路
1.队列,通过先进先出的特性,可以将链表进行一个排序,然后再将链表串起来。
2.比较创建新链表,遍历,一次遍历就创建新的链,谁小谁被串。
结果
1.队列
运行时间:19ms
占用内存:10900KB
2.比较创建新链表
运行时间:22ms
占用内存:10788KB
代码
1.队列
public ListNode Merge(ListNode list1,ListNode list2) {
ArrayDeque<ListNode> queue = new ArrayDeque<>();
while (list1 != null || list2 != null){
if (list1 == null) queue.add(list2);
else if (list2 == null) queue.add(list1);
else
if (list1.val >= list2.val) queue.add(list2);
else queue.add(list1);
if (queue.peekLast() == list1) list1 = list1.next;
else list2 = list2.next;
}
ListNode peek = queue.peek();
while (!queue.isEmpty()){
ListNode topNode = queue.pollFirst();
topNode.next = queue.peek();
}
return peek;
}2.比较创建新链表
public ListNode Merge(ListNode list1,ListNode list2) {
if (list1 == null || list2 == null) return list1==null?list2:list1;
ListNode newListHead = list1.val >= list2.val?list2:list1;
ListNode newList = newListHead;
if (newList == list1) list1 = list1.next;
else list2 = list2.next;
while (list1 != null || list2 != null){
if (list1 == null) {
newList.next = list2;
return newListHead;
}else if (list2 == null){
newList.next = list1;
return newListHead;
}else {
if (list1.val >= list2.val) {
newList.next = list2;
list2 = list2.next;
}
else{
newList.next = list1;
list1 = list1.next;
}
newList = newList.next;
}
}
return newListHead;
}