当前位置: 首页 > Web前端 > HTML

206.反向链表-算法(leetcode,附思维导图+全解)300题

时间:2023-03-27 23:08:42 HTML

零题目:算法(leetcode,附思维导图+全解)300题(206)反向链表1题描述二解概览(思维导图)三全解1Scheme11)Code://Scheme1"self.Reductionmethod".//技巧:“归约法,把不熟悉的转化为熟悉的。一般我们把链表转化成数组存储,题目就会变得好做(注:但面试官可能不满意!!)”.//思路://1)边界:如果是空链表,直接返回null。//2)状态初始化:resList=[],resHead=head.//3)核心1:遍历链表,将链表上的值存入数组resList。//4)核心2:逆序遍历resList,依次去更新值head.val。//5)返回结果:resHead.varreverseList=function(head){//1)边界:如果是空链表,直接返回null。如果(!head){返回null;}//2)状态初始化:resList=[],resHead=head.让resList=[],resHead=head;//3)核心1:遍历链表,将链表上的值存入数组resList。while(head){resList.push(head.val);head=head.next;}//4)核心2:逆序遍历resList,依次移动到更新值head.val。constl=resList.length;头=resHead;指数=l-1;while(index>=0){head.val=resList[index];指数-;head=head.next;}//5)返回结果:resHead。returnresHead;}??;2场景21)代码://场景2“self.recursive方法”。//注:“链表结构的特殊性,有些问题可以使用皇贵解决。——数据结构与解决方案兼容。”//思路://1)递归退出//注意:如果当前链表的节点数<2,直接返回头节点head即可!//2)递归体//2.1)先对后面的节点进行反转//2.2)后续的反转完成后,再次对head.next进行反转。//2.3)最后反转head。//2.4)最后返回结果节点resHead。varreverseList=function(head){//1)递归退出//注意:如果当前链表的节点数<2,直接返回头节点head!if(head===null||head.next===null){returnhead;}//2)递归体//2.1)首先反转后面的节点constresHead=reverseList(head.next);//2.2)后面的反转结束,再反转head.next。head.next.next=头;//2.3)然后反转head。head.next=null;//2.4)最后返回结果节点resHead。returnresHead;}??3Scheme31)Code://Scheme3"self.iterationmethod".//1)状态初始化:pre=null,cur=head.//2)核心:循环处理,条件为cur为真。//2.1)核心:下面4行,说白了就是处理cur.next,pre,cur3之间的关系!//即[cur.next,pre,cur]=[pre,cur,cur.next]。//注意:上面4行相当于下面1行,但是上面的性能要好很多!//[cur.next,pre,cur]=[pre,cur,cur.next];//3)返回结果节点pre。varreverseList=function(head){//1)状态初始化:pre=null,cur=head.让pre=null,cur=head;//2)核心:循环处理,条件为cur为真。while(cur){//2.1)核心:下面4行,说白了就是处理cur.next,pre,cur3之间的关系!//即[cur.next,pre,cur]=[pre,cur,cur.next]。constnext=cur.next;当前.next=pre;前=当前;当前=下一个;//注意:上面4行相当于下面1行,但是上面的性能要好很多!//[cur.next,pre,cur]=[pre,cur,cur.next];}//3)返回结果节点pre。returnpre;}4资源分享&更多1历史文章-概览2博主简介码农三少,致力于编写极简但完整的问题解决方案(算法)的博主。专注一题多解,结构化思维,欢迎一起刷LeetCode~