输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例1:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
限制:0 <= 链表长度 <= 1000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/he-bing-liang-ge-pai-xu-de-lian-biao-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
先设置一个最小的头结点,来代替最小值,这样不论l1还是l2哪个头结点最小 都可以把节点添加到这个新链表中
l1 或者 l2 只要有一个没有遍历完就继续遍历 因为l1 和 l2 都是有序的链表,如果遍历完了 l1,那么剩下的 l2部分值 肯定也是有序的 而因为新链表也是有序的,所以剩下的没有遍历完的链表值,肯定是小于等于新链表的值的, 所以直接加在新链表后边就可以了。 l1 和 l2 分别指向两个链表的当前节点。
剩下的链表的值,直接加入到新链表的结尾, 如果两个链表同时遍历完,那么l2就是null,即cur.next为null
因为我们自定义了一个头节点,所以返回dum.next
算法相当于从前向后依次有序地摘下 l1 和 l2 值,加入到新链表中。
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode dum = new ListNode(0), cur = dum;
while(l1 != null && l2 != null) {
if(l1.val < l2.val) {
cur.next = l1;
l1 = l1.next;
}
else {
cur.next = l2;
l2 = l2.next;
}
cur = cur.next;
}
if(l1 != null){
cur.next = l1;
}else{
cur.next = l2;
}
return dum.next;
}
}
我们都知道,长期坚持学习,会给自己带来很大的改变,但是,大脑中的奖励系统,决定了我们跟倾向于去选择眼下的快乐。
那么怎么在面对诱惑的时候,选择更加“长远的快乐”呢?
改变自己的想法。当你在早晨6点醒来,不想起床想再睡一会儿的时候,可以想一想。如果再睡过去,那么就可能不是睡一会儿了,睡的时间长了,那么你当天的任务就无法完成,无法完成任务你就会在晚上感觉到懊悔与痛苦。
两个选择,睡懒觉会痛苦,起床也会痛苦。
那么这两个痛苦相比,哪个更加有意义呢?
起床去学习的痛苦更有意义,因为至少完成了当天的任务,学习到了知识,收获了成长。
这样就可以看出来,我们不是在眼下的快乐和长远的快乐之间做选择,而是在无意义的痛苦和有意义的痛苦之间做选择。
不自律就不自由。