题目链接:https://www.nowcoder.com/questionTerminal/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) {
ListNode head = null;
ListNode pointer = null;
if(list1.val < list2.val){
head = list1;
pointer = head;
list1 = list1.next;
}else{
head = list2;
pointer = head;
list2 = list2.next;
}
while(list1 != null || list2 != null){
if(list1.val < list2.val){
pointer.next = list1;
pointer = pointer.next;
}else{
pointer.next = list2;
pointer = pointer.next;
}
}
return head;
}
}
提交结果
运行超时:您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。
反思
复杂度预估计为O(n),不应该运行不完啊。
看了别人的题解,自己按思路写了一遍。
第二次编辑代码:
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
if(list1 == null){
return list2;
}else if(list2 == null){
return list1;
}
ListNode list = null;
if(list1.val > list2.val){
list = list1;
list1 = list2;
list2 = list;
}
list = list1;
ListNode nxt = null;
while(list1.next != null && list2 != null){
if(list1.next.val <= list2.val){
list1 = list1.next;
}else{
nxt = list1.next;
list1.next = list2;
list2 = list2.next;
list1 = list1.next;
list1.next = nxt;
}
}
while(list2 != null){
list1.next = list2;
}
return list;
}
}
提交结果
运行超时:您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。
反思
服了。
原来是不小心把if写成while了。
第三次编辑代码:
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
if(list1 == null){
return list2;
}else if(list2 == null){
return list1;
}
ListNode list = null;
if(list1.val > list2.val){
list = list1;
list1 = list2;
list2 = list;
}
list = list1;
ListNode nxt = null;
while(list1.next != null && list2 != null){
if(list1.next.val <= list2.val){
list1 = list1.next;
}else{
nxt = list1.next;
list1.next = list2;
list2 = list2.next;
list1 = list1.next;
list1.next = nxt;
}
}
if(list2 != null){
list1.next = list2;
}
return list;
}
}