Leetcode 刷题 206. 反转链表

很多前端的同学对数据结构和算法这块没有太多的概念,很多leetcode的题目看不懂,有时候可能看了题解也不知道是什么意思。上一篇我们对链表的数据结构有了了解,下面根据题目来练习一下

206. 反转链表

题目

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

题解

其实这道题很好理解,我们拿一个例子表示:

比如我们需要将上图的链表进行反转,需要做的是将节点1的next指向节点1的前面的节点,但是节点1前面并没有节点,所以需要用到一个虚拟头节点(pre).如图:

那现在就比较好操作了,定义一个虚拟头结点pre,头节点为cur,然后将cur的next节点指向pre节点,然后再将节点pre和cur往后移动一位,进行下一次反转

下面我们来看下代码:

js 复制代码
var reverseList = function(head) {
  let cur = head
  let pre = null
  while(cur !== null ) {
    let next = cur.next
    cur.next = pre
    pre = cur
    cur = next
  }

  return pre
};

虚拟头节点为pre,头节点为cur,每一次循环则反转一个节点。首先记录下cur的下一个节点为next,然后将cur.next指向虚拟头节点pre,然后将pre和 cur往后移动。

当cur为null的时候说明链表已经到头了,则退出循环,直接返回pre即可。

还可以用es6的解构赋值优化一下

ini 复制代码
var reverseList = function (head) {
  let pre = null
  let cur = head
  while (cur) {
    [cur.next, pre, cur] = [pre, cur, cur.next]
  }
  return pre
};

欢迎大家点赞评论,大家一起学习一起进步!!!

相关推荐
智能直播5 小时前
RK3518:1.5G 内存 + 8G 存储,如何跑起硬件编解码、Web、AI 识别、绿幕特效
前端·人工智能·5g
掘金酱6 小时前
【10.24 特别活动】AI 时代,程序员的新饭碗在哪里?
前端·人工智能·后端
excel6 小时前
多进程环境下使用 PM2 部署 Socket.IO:需要注意什么
前端
stsdddd6 小时前
YOLO算法建筑工地安全帽目标检测数据集16881张:标注核对笔记
算法·yolo·目标检测
IT_陈寒6 小时前
Redis的原子性竟然失效了?记一次分布式锁翻车实录
前端·人工智能·后端
CV爱数码7 小时前
论文精读|Learned Primal-Dual:把原始–对偶算法展开成网络
图像处理·算法·计算机视觉·ct·重建·断层扫描
yuniko-n7 小时前
【算法】约瑟夫环问题
java·算法
l1t8 小时前
测试DuckDB v2.1.0-alpha49002的bignum乘法
数据库·sql·算法·duckdb
Nil2088 小时前
LeetCode 283移动零
数据结构·算法·leetcode
时间的情敌8 小时前
《回顾 2018 前端:Vue2 成熟期,Webpack4 发布,PWA 大火》
前端