解题思路

1. 首先考虑思路就是进行前序遍历,将每一个节点的指针进行反转,在循环遍历时需要对每一个节点进行操作,这里我们用cur变量用于在遍历时保存当前节点;

2. JS单向链表是只有next指针的,要想对齐进行反转,需要一个类似于next的变量来保存反向的指针(即反转以后的next指针),这里定义一个变量prev,因为next是对象类型的变量,所以我们将初始化为 null;

3. 我们需要将每一个节点的next的值指向prev,这就需要进行将当前节点的next值指向prev,即cur.next = prev ;

4. 然后我们将继续遍历当前节点的下一个节点,即 cur = cur.next,但是由于我们在第3步已经修改了 cur.next ,现在再需要使用时,cur.next 已经发生了变化,因此我们需要定义一个临时变量temp来存储这个需要修改两次的值,防止它在第一次修改完,原始值丢失

5. 将 prev = cur,cur = cur.next 循环的当前节点后移即可

需要定义的变量及其初始化

这里需要仔细思考,哪些变量的指针要进行多次变化,如果是,其原始值是否还会再次使用;如果只用一次或者变化以后,原始值不再使用,就需要一个变量保存原始值,便于后续取用

let cur = pHead; // pHead为当前给定的头结点
let temp = null;
let prev = null;

返回值的确定

循环遍历的终止条件是当前节点为 null ,当循环结束时,prev相当于是正向链表的next指针,而prev也是刚好在当前反转链表的头节点,所以返回cur即可

完整代码

// function ListNode(x){
//     this.val = x;
//     this.next = null;
// }// 单向链表
function ReverseList(pHead){// 首先排除链表为空或者链表只有一个节点的情况if(pHead == null || pHead.next == null){return pHead}let temp = null;let prev = null;let cur = pHead; // 用于在遍历时保存当前节点while(cur!=null){  temp = cur.next;cur.next = prev; //最关键的一步,修改链表指向prev = cur;  // 修改完指向以后,更新它的值cur = temp;  // 耿欣当前节点的值}return prev; // 是反转后的链表的表头
}module.exports = {ReverseList : ReverseList
};

本文思路参考如下视频 http://【Leetcode刷题 206.反转链表 Reverse Linked List-哔哩哔哩】 https://b23.tv/hex6XfE

JS反转链表 - I相关推荐

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

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

  2. c语言最大字符1025,1025 反转链表 (25 分)C语言

    题目描述 给定一个常数K以及一个单链表L,请编写程序将L中每K个结点反转.例如:给定L为1→2→3→4→5→6,K为3,则输出应该为 3→2→1→6→5→4:如果K为4,则输出应该为4→3→2→1→5 ...

  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. siwft 写时复制 Copy-On-Write
  2. 【Java】牛客网 链表分割
  3. Leetcode 62. Unique Paths
  4. 三十四、Scrapy中的CrawlSpider
  5. 为什么我喜欢写即时通讯软件呢?
  6. LVQ,Learning Vector Quantization,学习向量量化
  7. android studio gradle 更新方法。
  8. 【数据结构笔记38】桶排序、基数排序、多关键字排序、排序算法汇总比较
  9. 2021年SWPUACM暑假集训day5单调栈算法
  10. 【Win10】【Win2D】实现控件阴影效果
  11. centos 挂载与卸载硬盘
  12. 思科软件服务器怎么作用,Cisco设备如何应用应用TFTP服务器
  13. 【速达软件】【速达5000】5系3.97批量删除采购开单从表重复项并合计到主表
  14. 关于Win10系统的封装
  15. Java工程师胜任力素质模型,胜任力故事汇编C47│AspiringMinds:高潜力程序员的胜任力素质模型...
  16. mac上装windows10
  17. Max-Margin Regularization for Chamfer Matching
  18. pyspark运行加速方法思考(一)
  19. Matlab外部程序接口
  20. java开发一个购物车实验,JAVAWEB购物车实验报告.doc

热门文章

  1. 《创业维艰》详细的思维导图
  2. 苹果 iPhone 13 内置原生壁纸下载
  3. loader-wizard.php,安装ioncube扩展
  4. 常见拓展名--的含义(扩宽知识面)
  5. android键盘怎么打韩文,手机韩文输入法九键盘如何使用?
  6. 系统学习语义分割文章推荐以及顺序
  7. 关于DiskGenius 克隆分区和系统迁移问题,以及如何解决缺少系统引导、双硬盘双系统引导问题,多个启动项
  8. 解决eclipse安装Darkest Dark Theme报错
  9. CCF CSP 202009-3 点亮数字人生
  10. 决策树ID3算法,计算过程