JS反转链表 - I
解题思路
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相关推荐
- 剑指 Offer II 024. 反转链表
注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路. 描述 给定单链表的头节点 head ,请反转链表,并返回反转后的链表的头节点. 示 ...
- 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 ...
- PAT (Basic Level) Practise (中文)-1025. 反转链表 (25)
PAT (Basic Level) Practise (中文)-1025. 反转链表 (25) http://www.patest.cn/contests/pat-b-practise/1025 ...
- 剑指offer:面试题24. 反转链表
题目:反转链表 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4- ...
- leetcode-92 反转链表II
题目描述如下: 反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明: 1 ≤ m ≤ n ≤ 链表长度. 示例: 输入: 1->2->3->4->5->NUL ...
- 反转链表JAVA算法_链表反转算法
1 packagecom.trs.codetool.sort;2 3 /** 4 *@authorzheng.changgang5 * @date 2020-01-02 09:576 * 链表的常见算 ...
- LeetCode实战:反转链表
背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Reverse a s ...
- 剑指offer_第15题_反转链表_Python
题目描述 输入一个链表,反转链表后,输出新链表的表头. 理解 怎么反转? 我要找到每个结点 改变每个结点的next 参考阅读: 链表翻转的图文讲解(递归与迭代两种实现) 翻转链表的三种方法 解题思路 ...
- 【Java】LeetCode 206 反转链表
题目 :给你单链表的头节点 head ,请你反转链表,并返回反转后的链表. 解题思路 : 1.根据以上代码 ,来进行反转链表的操作: 2.最后实现的效果为: 具体思路: 1.首先判断如果链表为空的话, ...
- python实现反转链表讲解_基于Python实现2种反转链表方法代码实例
题目: 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: 你 ...
最新文章
- siwft 写时复制 Copy-On-Write
- 【Java】牛客网 链表分割
- Leetcode 62. Unique Paths
- 三十四、Scrapy中的CrawlSpider
- 为什么我喜欢写即时通讯软件呢?
- LVQ,Learning Vector Quantization,学习向量量化
- android studio gradle 更新方法。
- 【数据结构笔记38】桶排序、基数排序、多关键字排序、排序算法汇总比较
- 2021年SWPUACM暑假集训day5单调栈算法
- 【Win10】【Win2D】实现控件阴影效果
- centos 挂载与卸载硬盘
- 思科软件服务器怎么作用,Cisco设备如何应用应用TFTP服务器
- 【速达软件】【速达5000】5系3.97批量删除采购开单从表重复项并合计到主表
- 关于Win10系统的封装
- Java工程师胜任力素质模型,胜任力故事汇编C47│AspiringMinds:高潜力程序员的胜任力素质模型...
- mac上装windows10
- Max-Margin Regularization for Chamfer Matching
- pyspark运行加速方法思考(一)
- Matlab外部程序接口
- java开发一个购物车实验,JAVAWEB购物车实验报告.doc