当前位置: 首页 > news >正文

反转链表(JS)

反转链表

题目

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

示例 1:

img

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

示例 2:

img

输入:head = [1,2]
输出:[2,1]

示例 3:

输入:head = []
输出:[]

头插法反转解题思路

定义一个新的链表和一个临时节点,遍历原链表并保存每一个节点的next指针,将该节点加入新链表头指针后的一个节点。循环遍历,原链表的最后一个节点即是新链表的第一个有效值节点。

代码

/*** @param {ListNode} head* @return {ListNode}*/
var reverseList = function(head) {let p =head;let q =new ListNode(0);while(p){let x=p.next;p.next = q.nextq.next = p;p=x;}return q.next;
};

迭代解题思路

直接改变每一个指针方向,对原链表每一个指针方向进行改变达到反转链表的效果。在遍历链表时,将当前节点的 next 指针改为指向前一个节点。由于节点没有引用其前一个节点,因此必须事先存储其前一个节点。在更改引用之前,还需要存储后一个节点。最后返回新的头引用。

代码

/*** @param {ListNode} head* @return {ListNode}*/
var reverseList = function(head) {let tail = null;//首先定义一个尾指针,让它从原链表的头开始依次往前,直到原链表的头指针let p = head;//定义一个p不改变原链表地址while(p){let x = p.next;//保存下一个节点位置p.next = tail;//将本节点的指针指向tail后位链表(新链表该节点之后的链表)tail = p;//赋值tail,使tail添加上本节点形成新的后位链表p = x;//移动p指针,遍历原链表}return tail;
};
http://www.lryc.cn/news/104310.html

相关文章:

  • [PyTorch][chapter 45][RNN_2]
  • 基于canvas画布的实用类Fabric.js的使用
  • 基于SpringBoot+Vue驾校理论课模拟考试系统源码(自动化部署)
  • SpringBoot使用Redis对用户IP进行接口限流
  • MeterSphere学习篇
  • 大数据技术之Clickhouse---入门篇---数据类型、表引擎
  • 【微服务架构设计】微服务不是魔术:处理超时
  • 天下风云出我辈,AI准独角兽实在智能获评“十大数字经济风云企业
  • SpringBoot2学习笔记
  • 安达发|APS生产派单系统对数字化工厂有哪些影响和作用
  • 状态机的介绍和使用 | 京东物流技术团队
  • tinkerCAD案例:32. 使用对齐工具构建喷泉
  • 一起学数据结构(2)——线性表及线性表顺序实现
  • mqtt协议流程图
  • 7、单元测试--测试RestFul 接口
  • 国家留学基金委(CSC)|发布2024年创新型人才国际合作培养项目实施办法
  • 找好听的配乐、BGM就上这6个网站,免费商用。
  • 【前端知识】React 基础巩固(三十五)——ReduxToolKit (RTK)
  • android Android Studio Giraffe | 2022.3.1 版本Lombok不兼容 解决方案
  • 前端框架学习-基础前后端分离
  • 数据中心电子电气设备常见的五种地线种类和做法
  • 重学C++系列之STL库
  • JAVA SE -- 第十四天
  • 微信小程序监测版本更新
  • 《Java面向对象程序设计》学习笔记——第 2 章 基本数据类型、数组和枚举类型
  • TDesign中后台管理系统-访问后端服务
  • 【机器学习】Gradient Descent for Logistic Regression
  • ElasticSearch基础篇-Java API操作
  • 解决uniapp的tabBar使用iconfont图标显示方块
  • UE4/5C++多线程插件制作(0.简介)