数据结构与算法-反转单链表

数据结构与算法-反转单链表

大家好,欢迎回到我们的算法学习系列。今天,我们将探讨一个在算法面试中非常经典的问题——反转单链表。

什么是单链表?

在介绍问题之前,我们先简单了解一下单链表。单链表是一种线性数据结构,由一系列节点组成,每个节点包含两个部分:存储数据的部分和指向下一个节点的指针。链表的第一个节点称为头节点,最后一个节点的指针指向 null,表示链表的结束。

反转单链表问题描述

给定一个单链表的头节点,反转这个链表,使得链表的尾节点变为头节点,并返回新的头节点。

示例

  • 输入:1 -> 2 -> 3 -> 4 -> 5 -> null
  • 输出:5 -> 4 -> 3 -> 2 -> 1 -> null

解决思路

我们可以通过迭代的方法来反转单链表。基本思路是遍历链表,并将当前节点的指针指向前一个节点,从而改变链表的方向。

实现代码

下面是用JavaScript实现这个算法的代码:

function ListNode(val) {this.val = val;this.next = null;
}function reverseList(head) {let prev = null;let curr = head;while (curr !== null) {let nextTemp = curr.next;curr.next = prev;prev = curr;curr = nextTemp;}return prev;
}

代码解析

  1. 定义节点结构ListNode 是一个链表节点的构造函数,每个节点有一个值 val 和一个指向下一个节点的指针 next
  2. 初始化指针:我们定义两个指针 prevcurr,分别表示前一个节点和当前节点。初始时,prevnullcurr 为头节点 head
  3. 遍历链表
    • 保存下一个节点:我们用 nextTemp 保存当前节点的下一个节点。
    • 反转指针:将当前节点的指针指向前一个节点。
    • 移动指针:更新 prevcurr 指针,进入下一个节点。
  4. 返回新的头节点:遍历结束后,prev 指向反转后的新头节点,返回 prev

图解

让我们通过图解来理解反转过程:

初始链表:

head -> 1 -> 2 -> 3 -> 4 -> 5 -> null
prev  curr

第一步:

head -> 1 -> null
prev  curr

第二步:

head -> 2 -> 1 -> null
prev      curr

第三步:

head -> 3 -> 2 -> 1 -> null
prev         curr

依次类推,直到 currnull,链表反转完成。

小结

今天,我们介绍了反转单链表的问题及其解决方法。通过迭代的方法,我们可以高效地反转一个单链表,这是一个在面试中经常遇到的经典问题。

感谢大家的阅读!如果你有任何问题或建议,欢迎在评论区留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/18942.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

气缸前端锁紧技术探讨:从四个方面、五个方面、六个方面和七个方面深度解析

气缸前端锁紧技术探讨:从四个方面、五个方面、六个方面和七个方面深度解析 在工业自动化领域,气缸作为关键的执行元件,其前端锁紧技术的稳定性与可靠性直接影响到整个系统的运行效率。本文将从四个方面、五个方面、六个方面和七个方面&#…

python 面对对象 类 补充

isinstance isinstance():判断一个实例化对象是否属于这个类的,isinstance(对象,类) class Man():passclass Women():passa Man()print(isinstance(a, Man)) # True print(isinstance(a, Women)) # False 类的属性操作 getattr() 获…

小白windows系统从零开始本地部署大模型全记录

大家好,最近两年大语言模型风靡全球,最近,不少开源大模型,将模型部署到自己的电脑上,用个性化的数据微调想必是不少人的愿望,这次,让我来分享从hugging face上下载部署chatglm3-6b中的经验。 1.…

自动控制: 最小二乘估计(LSE)、加权最小二乘估计(WLS)和线性最小方差估计

自动控制: 最小二乘估计(LSE)、加权最小二乘估计(WLS)和线性最小方差估计 在数据分析和机器学习中,参数估计是一个关键步骤。最小二乘估计(LSE)、加权最小二乘估计(WLS&…

conda环境里安装ffmpeg

遇到的问题 在执行脚本的时候提示: /home/xxx/anaconda3/envs/llm-asr/lib/python3.9/site-packages/pydub/utils.py:170: RuntimeWarning: Couldnt find ffmpeg or avconv - defaulting to ffmpeg, but may not workwarn("Couldnt find ffmpeg or avconv - …

wifi贴码推广哪家靠谱?

如今越来越多的人想轻资产创业,WIFI贴码是共享行业最无成本的创业项目了,而在选择厂商的时候,大家就想要知道哪家公司靠谱,更好、更便宜、可靠。那么wifi贴码推广哪家靠谱?别急,下面小编将带你一起了解。 目…

OpenAI开始训练新的前沿模型——但GPT-5至少在90天内不会推出

ChatGPT 制造商 OpenAI 今早宣布,已开始训练其新的“前沿模型”,并成立了一个新的安全委员会,由现任董事会成员 Bret Taylor(OpenAI 董事会主席兼客户服务初创公司 Sierra AI 联合创始人、前谷歌地图负责人和前 Facebook 首席技术…

BGP路由策略实验

一、实验拓扑 二、IP分配(骨干) R1: 0/0/0 15.0.0.1 24 0/0/1 18.0.0.2 24 0/0/2 19.0.0.1 24 R2: 0/0/0 16.0.0.1 24 0/0/1 15.0.0.2 24 R3: 0/0/0 17.0.0.2 24 0/0/1 18.0.0.1 24 R4: 0/0/0 16.0…

元宇宙vr工业产品展示空间降低研发成本

元宇宙产品虚拟展厅搭建编辑器为您提供了一个自助式元宇宙场景搭建的绝佳平台。无论您是设计公司、摄影公司、营销公司还是教育机构,我们都能为您量身打造专属的元宇宙解决方案,满足您的多样化需求。 元宇宙产品虚拟展厅搭建编辑器具备强大的3D编辑功能&…

蓝牙设备中的UUID

文章目录 一、Device UUID二、Service UUID 一、Device UUID Device UUID也可以被称作为DeviceID。 Android 设备上扫描获取到的 deviceId 为外围设备的 MAC 地址,相对固定。iOS 设备上扫描获取到的 deviceId 是系统根据外围设备 MAC 地址及发现设备的时间生成的 …

如何成为AI工程师

AI工程师(不是打标员)已经成为新一代的热门岗位(高薪、有前景),无论你是计算机科学专业的学生,还是已经在其他技术领域工作的专业人士,可以通过以下几点来大概了解如何成为AI工程师。 1. 技术技…

【吊打面试官系列】Java高并发篇 - ThreadLocal 是什么?有什么用?

大家好,我是锋哥。今天分享关于 【ThreadLocal 是什么?有什么用?】面试题,希望对大家有帮助; ThreadLocal 是什么?有什么用? ThreadLocal 是一个本地线程副本变量工具类。主要用于将私有线程和该…

dust3r部署踩坑全记录

目前dust3r是三维重建最新最好的技术,运用了ViT编码器、Transformer、注意力机制、回归等技术,无需相机参数标定。 但是我部署过程中有很多坑,记录一下。 1.OSError: CUDA_HOME environment variable is not set. Please set it to your CU…

Itme4 对象使用前进行初始化

fun(){ int a; printf("%d\n", a); cout << a << endl; //会报错 使用了未初始化的变量a } //若a是全局变量则不会报错 会默认初始化为0 在对象中优先使用初始化列表&#xff1a; ABEntry::ABEntry(const std::string& name, const std::string&…

数字工厂管理系统可以和哪些软件集成

随着工业4.0时代的到来&#xff0c;数字工厂管理系统已成为制造业转型升级的核心驱动力。数字工厂管理系统通过集成各种软件和技术&#xff0c;实现了生产过程的数字化、网络化和智能化&#xff0c;大大提高了生产效率和管理水平。本文将探讨数字工厂管理系统可以与哪些软件集成…

Axure RP软件汉化操作步骤

随着互联网产业的发展&#xff0c;设计师已经成为一个越来越受欢迎的职业&#xff0c;设计软件已经成为设计师必不可少的工具。说到设计软件&#xff0c;不得不说的是 Axure rp &#xff0c;越来越多的设计师使用它来设计产品原型&#xff0c;作为美国 Axure Software Solution…

OrangePi Kunpeng Pro体验——安装Hass与驱动SPI小屏幕

OrangePi Kunpeng Pro 是一款面向开发者和爱好者的高性能开发板。在本次测评中&#xff0c;主要将以前的一些代码在该开发板上实现&#xff0c;包括docker部署hass&#xff0c;引脚驱动SPI小屏幕。中间遇到了一些小小问题&#xff0c;但都成功了&#xff0c;一起来试试吧~ 一、…

IDM有哪些优势?

IDM&#xff08;Internet Download Manager&#xff09;作为一款功能强大的文件下载工具&#xff0c;其优势主要体现在以下几个方面&#xff1a; 高速下载&#xff1a; IDM采用动态分段算法&#xff0c;将文件分成多个段同时下载&#xff0c;从而显著加快了下载速度。支持从多个…

删除中间节点

题目链接 删除中间节点 题目描述 注意点 node既不是链表头节点&#xff0c;也不是链表尾节点 解答思路 将当前节点的值替换为下一个节点的值&#xff0c;并将当前节点的next指针设置为下一个节点的next指针&#xff0c;可以理解为删除了当前节点 代码 /*** Definition f…

考研计组chap1计算机系统概述

目录 一、计算机发展历程(不考了) 二、计算机硬件的基本组成 3 1.五个部分 &#xff08;1&#xff09;输入设备 &#xff08;2&#xff09;控制器 &#xff08;3&#xff09;运算器 &#xff08;4&#xff09;&#xff08;主&#xff09;存储器 &#xff08;5&#xff0…