作业感受
题目地址: https://leetcode-cn.com/leetbook/read/linked-list/fnzd1/
最近工作有些瞎忙,做题比较少。今天在家补补课。
今天的作业不难,但是第一次提交结果不太好,用时1ms,垫底啊,提交了两次都一个样子,看来是真的需要优化了。花点心思。
第一次提交作业代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1 == null && l2 != null) return l2;
if(l2 == null && l1 != null) return l1;
if(l1 == null && l2 == null) return null;
ListNode checkL1 = l1, prev ,curr, dummyHead = new ListNode(-1);
prev = dummyHead; curr = l2;
prev.next = curr;
while(checkL1 != null && curr != null){
if(checkL1.val > curr.val) {
prev = prev.next;
curr = curr.next;
}else{
prev.next = new ListNode(checkL1.val,curr);
checkL1 = checkL1.next;
prev = prev.next;
}
}
if(checkL1 == null) prev.next = curr;
if(curr == null) prev.next = checkL1;
return dummyHead.next;
}
}
第一次提交作业的表现
第二次提交的代码
在第一次提交的基础上优化,将在L2中新增节点的操作变更为直接将L1的节点插入L2。用时减少了,但是内存消耗居然增加了!意外啦,看来我得严肃的分析一下啦。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1 == null && l2 != null) return l2;
if(l2 == null && l1 != null) return l1;
if(l1 == null && l2 == null) return null;
ListNode checkL1 = l1, prev ,curr, dummyHead = new ListNode(-1);
prev = dummyHead; curr = l2;
prev.next = curr;
while(checkL1 != null && curr != null){
if(checkL1.val > curr.val) {
prev = prev.next;
curr = curr.next;
}else{
prev.next = checkL1;
checkL1 = checkL1.next;
prev = prev.next;
prev.next = curr;
}
}
if(checkL1 == null) prev.next = curr;
if(curr == null) prev.next = checkL1;
return dummyHead.next;
}
}
与第一次的代码对比,可以发现第二次的代码循环中else的语句多了一条,但是真的想不出为什么就这么消耗内存啊,只是赋值啊!于是又把同样的代码提交了一次,这次内存消耗变成37.8MB, 果然这个指标很不稳定啊!
第二次提交代码的表现
第二次代码重复提交后的表现