题目描述

输入一个长度为n链表,反转链表后,输出新链表的表头。

数据范围: n≤1000
要求:空间复杂度 O(1) ,时间复杂度 O(n)。

如当输入链表{1,2,3}时,
经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。
以上转换过程如下图所示:

示例1:

输入:{1,2,3}
返回值:{3,2,1}

示例2:

输入:{}
返回值:{}
说明:空链表则输出空

递归实现

先看代码:

function ReverseList(pHead){if(pHead === null){return null}let head = pHead;let last = null;function reverse(pNode){if(pNode.next === null){last = pNode;return pNode;}else{let node = reverse(pNode.next);node.next = pNode;if(pNode === head){pNode.next = nullreturn last;}else{return pNode;}}}return reverse(pHead);
}const obj = {value: 1,next: {value: 2,next: {value: 3,next: {value: 4,next: {value: 5,next: null}}}}
}ReverseList(obj)

解析

通过递归实现链表反转主要有

  • 第一步判断传过来的第一个节点对象是否为null,如果为null,说明没有链表直接返回null即可
  • 第二步通过head变量承接原来的头节点,设置一个last节点用来后面指定反转后的头节点
  • 然后我们定义内部函数,用来实现递归,递归入口是头节点,出口为尾节点。我们通过调用reverse传递的当前节点pNode判断,如果pNode.next !== null,继续调用reserve函数自己,将当前节点的next作为参数,判断下一个节点的next是否为空。当pNode.next === null说明到了尾节点,return当前节点出递归,开始向上返回,
  • 向上返回以后开始,node是pNode的下一个节点,我们要进行反转链表就要把node.next指向pNode,也就是node.next = pNode;
  • 一层层向上返回,如果pNode不等于头节点,说明链表还没有反转到最后一个节点,我们把当前节点返回,到调用reserve的上层,返回的节点也就是上层pNode的next。当pNode === head,也就是当前节点等于头节点了,说明链表反转到最后一个节点了设置pNode.next = null,并返回反转后的头节点也就是前面存储的last变量的值。
    总结:递归方式解决反转链表就类似于一个栈结构,先把所有节点丢入栈内,然后从栈顶依次将next指向前一个节点。

图示递归过程

双指针实现

function ReverseList(pHead){let list = pHead;let p = list;let q = null;if(p === null){return null;}while(p.next !== null){q = p.next;p.next = q.next;q.next = list;list = q;}return list
}
  • list、p变量指向头节点,q置空。通过list和q指针移动进行反转链表
  • 先判断如果头节点为null则返回null
  • 进入循环,q移动到p.next节点
  • 因为q = p.next,所有p.next = q.next即p.next = p.next.next,是将p.next指向了原本的p.next的下一个节点,在下一个循环中,q会移动至本层的p.next,也就是往后移一位
  • q.next = list;将q的next指向list,list在q的前一位,从而达到指针反转的目的
  • 将q的地址复制给list,保证下一次循环,q向后移动一位后,list仍在q前一位。

图示双指针过程

JavaScript——反转链表相关推荐

  1. (进阶)LeetCode(206)——反转链表(JavaScript)

    反转一个单链表. 示例1: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: 你可以迭 ...

  2. 剑指 Offer II 024. 反转链表

    注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路. 描述 给定单链表的头节点 head ,请反转链表,并返回反转后的链表的头节点. 示 ...

  3. PAT (Basic Level) Practise (中文)-1025. 反转链表 (25)

    PAT (Basic Level) Practise (中文)-1025. 反转链表 (25)   http://www.patest.cn/contests/pat-b-practise/1025 ...

  4. 剑指offer:面试题24. 反转链表

    题目:反转链表 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4- ...

  5. leetcode-92 反转链表II

    题目描述如下: 反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明: 1 ≤ m ≤ n ≤ 链表长度. 示例: 输入: 1->2->3->4->5->NUL ...

  6. 反转链表JAVA算法_链表反转算法

    1 packagecom.trs.codetool.sort;2 3 /** 4 *@authorzheng.changgang5 * @date 2020-01-02 09:576 * 链表的常见算 ...

  7. LeetCode实战:反转链表

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Reverse a s ...

  8. 剑指offer_第15题_反转链表_Python

    题目描述 输入一个链表,反转链表后,输出新链表的表头. 理解 怎么反转? 我要找到每个结点 改变每个结点的next 参考阅读: 链表翻转的图文讲解(递归与迭代两种实现) 翻转链表的三种方法 解题思路 ...

  9. 【Java】LeetCode 206 反转链表

    题目 :给你单链表的头节点 head ,请你反转链表,并返回反转后的链表. 解题思路 : 1.根据以上代码 ,来进行反转链表的操作: 2.最后实现的效果为: 具体思路: 1.首先判断如果链表为空的话, ...

  10. python实现反转链表讲解_基于Python实现2种反转链表方法代码实例

    题目: 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: 你 ...

最新文章

  1. StaticFactoryMethod_Level1
  2. 实现数据集多( 高 )维可视化(附代码)
  3. DNS 与 活动目录 的关系
  4. mysql spj_解决Electron启动出现短暂的白屏 - SegmentFault 思否
  5. python画有权重网络图_使用Python的networkx绘制精美网络图教程
  6. 软件测试 学习之路 DOS常用命令
  7. Python快速读取文件中指定的一行或多行
  8. STM32/M3/M0关于开关总中断的问题
  9. 将数据库中一张表中数据复制到另一张表
  10. hnu 暑期实训之7还是7 to_string的实现方法
  11. 那些坑爹的老代码,究竟改还是不改?!
  12. JavaWeb之HttpSession
  13. python中三角函数计算
  14. 七周成为数据分析师 第七周:Python
  15. date设置时间提示:Local time zone must be set--see zic manual page 2018
  16. 计算机如何与光猫连接网络,路由器怎么连接猫和电脑 路由器连接详解【图文】...
  17. 有趣的深度学习——使用TensorFlow 2.0 + RNN 实现一个古体诗生成器
  18. 洛谷P4598 解高次方程,数论
  19. 手绘图像检索:Deep Spatial-Semantic Attention for Fine-Grained Sketch-Based Image Retrieval
  20. OpenSSL/GmSSL 动态引擎

热门文章

  1. 修改屏幕分辨率比例,4*3拼接屏 21:9 比例,大屏项目拼接适配屏解决方案
  2. Useful webs
  3. 基于java jsp的大学生奖学金管理系统
  4. Layabox 实现 PageView 翻页
  5. Linux内核学习路径
  6. 手把手教你SPSS进行ROC曲线分析
  7. 密码忘用计算机解开,电脑密码忘了怎么办,详细教您电脑开机密码忘记了怎么解决...
  8. Agilent/安捷伦N6705B直流电源分析仪
  9. 黎活明给程序员的忠告(转)
  10. eLife:科勒Moxie 会唱歌的花洒