前言🌧️
算法,对前端人来说陌生又熟悉,很多时候我们都不会像后端工程师一样重视这项能力。但事实上,算法对每一个程序员来说,都有着不可撼动的地位。
因为开发的过程就是把实际问题转换成计算机可识别的指令,也就是《数据结构》里说的,「设计出数据结构,在施加以算法就行了」。
当然,学习也是有侧重点的,作为前端我们不需要像后端开发一样对算法全盘掌握,有些比较偏、不实用的类型和解法,只要稍做了解即可。
题目🦀
难度简单
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例1:
输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4
限制:
0 <= 链表长度 <= 1000
解题思路🌵
- 由于是两个排好序的链表,采用双指针遍历(一般涉及链表遍历这种就可以想到双指针)
- 先定一个初始节点h
- 分别遍历
l1
l2
,根据大小移动h指向合适的值 - 再分别移动
l1
或l2
指针 - 最后一定还省下一个链表未遍历完,使用空值合并运算符将它接到h之后
源码🔥
/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } */ /** * @param {ListNode} l1 * @param {ListNode} l2 * @return {ListNode} */ var mergeTwoLists = function(l1, l2) { const head=new ListNode(0) let h=head; while(l1&&l2){ if(l1.val<l2.val){ h.next=l1 l1=l1.next } else if(l2.val<=l1.val){ h.next=l2 l2=l2.next } h=h.next } h.next=l1??l2 return head.next };
时间复杂度: O(M+N)
空间复杂度 : O(1) :
结束语🌞
那么鱼鱼的LeetCode算法篇的「LeetCode」剑指Offer-25合并两个排序的链表⚡️
就结束了,算法这个东西没有捷径,只能多写多练,多总结,文章的目的其实很简单,就是督促自己去完成算法练习并总结和输出,菜不菜不重要,但是热爱🔥,喜欢大家能够喜欢我的短文,也希望通过文章认识更多志同道合的朋友,如果你也喜欢折腾
,欢迎加我好友
,一起沙雕
,一起进步
。