题目链接:LeeCode21合并两个有序链表
题目描述:
每次比较两个链表头将小的一次插入结果集,时间复杂度就是O(m+n),思路很好,但是我写的太麻烦了
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1==null&&l2==null){
return null;
}
boolean flag=false;
ListNode ans=new ListNode();
if(l1!=null&&l2!=null){
flag=true;
if (l1.val > l2.val) {
ans=l2;
l2=l2.next;
}else{
ans=l1;
l1=l1.next;
}
}
ListNode temp=ans;
if (l1 == null&&flag==false) {
ans=l2;
l2=l2.next;
temp=ans;
while (l2 != null) {
temp.next=l2;
l2=l2.next;
temp=temp.next;
}
return ans;
}
if (l2 == null&&flag==false) {
ans=l1;
l1=l1.next;
temp=ans;
while (l1 != null) {
temp.next=l1;
l1=l1.next;
temp=temp.next;
}
return ans;
}
while (l1 != null && l2 != null) {
if (l1.val > l2.val) {
temp.next=l2;
l2=l2.next;
temp=temp.next;
}else{
temp.next=l1;
l1=l1.next;
temp=temp.next;
}
}
while(l1!=null){
temp.next=l1;
l1=l1.next;
temp=temp.next;
}
while(l2!=null){
temp.next=l2;
l2=l2.next;
temp=temp.next;
}
return ans;
}
}
题目过了之后看大神写的,当场膜拜,思路是一摸一样的思路,怎么就差这么多呢
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode prehead = new ListNode(-1);
ListNode prev = prehead;
while (l1 != null && l2 != null) {
if (l1.val <= l2.val) {
prev.next = l1;
l1 = l1.next;
} else {
prev.next = l2;
l2 = l2.next;
}
prev = prev.next;
}
// 合并后 l1 和 l2 最多只有一个还未被合并完,我们直接将链表末尾指向未合并完的链表即可
prev.next = l1 == null ? l2 : l1;
return prehead.next;
}
}