【剑指Offer打卡】25,强烈推荐

22 阅读2分钟

最后

总的来说,面试官要是考察思路就会从你实际做过的项目入手,考察你实际编码能力,就会让你在电脑敲代码,看你用什么编辑器、插件、编码习惯等。所以我们在回答面试官问题时,有一个清晰的逻辑思路,清楚知道自己在和面试官说项目说技术时的话就好了

开源分享:docs.qq.com/doc/DSmRnRG… 在线阅读地址

输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。

示例1:

输入:1->2->4, 1->3->4

输出:1->1->2->3->4->4

限制:

0 <= 链表长度 <= 1000

注意:本题与主站 21 题相同:leetcode-cn.com/problems/me…

题解一:暴力遍历


思路:

  1. 将两个链表的数据合并,并排序

  2. 重新还原成新的链表

var mergeTwoLists = function (l1, l2) {

let arr = [];

const head = new ListNode(null)

while (l1) {

arr.push(l1.val)

l1 = l1.next;

}

while (l2) {

arr.push(l2.val)

l2 = l2.next;

}

// 整合数据

arr = arr.sort((a, b) => a - b);

let cur = head;

arr.forEach(v => {

const node = new ListNode(v);

cur.next = node;

cur = cur.next;

})

return head.next;

};

题解二:双指针


  1. 利用排序的这一特点,分别在两个链表中选择相对小的那个

var mergeTwoLists = function (l1, l2) {

let head = new ListNode(null)

cur = head;

while (l1 || l2) {

if (!l1) {

cur.next = new ListNode(l2.val)

l2 = l2.next;

}else if (!l2) {

cur.next = new ListNode(l1.val)

l1 = l1.next;

} else if (l1.val < l2.val) {

cur.next = new ListNode(l1.val)

l1 = l1.next;

} else {

cur.next = new ListNode(l2.val)

l2 = l2.next;

}

cur = cur.next;

}

return head.next;

};

// by zy

var mergeTwoLists = function(l1, l2) {

let head = new ListNode(0);

let cur = head;

while(l1 && l2){

if(l1.val <= l2.val){

cur.next = l1;

结尾

学习html5、css、javascript这些基础知识,学习的渠道很多,就不多说了,例如,一些其他的优秀博客。但是本人觉得看书也很必要,可以节省很多时间,常见的javascript的书,例如:javascript的高级程序设计,是每位前端工程师必不可少的一本书,边看边用,了解js的一些基本知识,基本上很全面了,如果有时间可以读一些,js性能相关的书籍,以及设计者模式,在实践中都会用的到。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

html5