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

试编写算法将单链表就地逆置(默认是带头节 点,如果是不带头节点地逆置呢?)

编写一个算法来就地逆置一个单链表。默认情况下,链表是带头节点的,但如果链表不带头节点,逆置的过程会有所不同。

第一步:定义逆置函数

根据题目中的“试编写算法将单链表就地逆置”,我们需要:

  1. 定义一个逆置函数 reverse,它接受一个链表头节点的引用作为参数。

这部分的代码为:

void reverse(LNode*& L) {LNode *p = L->next, *r;L->next = NULL;

第二步:逆置链表

根据题目中的“就地逆置”,我们需要:

  1. 初始化 p 指向链表的第一个节点(跳过头节点)。
  2. 使用 while 循环遍历链表,直到 pNULL
  3. 在循环中,保存 p 的下一个节点到 r,然后将 pnext 指向头节点的下一个节点,最后更新头节点的 nextp

这部分的代码为:

    while (p != NULL) {r = p->next; // 保存下一个节点p->next = L->next; // 逆置当前节点L->next = p; // 更新头节点的nextp = r; // 移动到下一个节点}
}

第三步:处理不带头节点的链表

如果链表不带头节点,我们需要稍微修改上述代码。在这种情况下,我们不需要头节点,可以直接操作原链表的头节点。

这部分的代码为:

void reverseNoHead(LNode*& L) {LNode *p = L, *r;L = NULL; // 新的头节点初始化为NULLwhile (p != NULL) {r = p->next; // 保存下一个节点p->next = L; // 逆置当前节点L = p; // 更新新的头节点p = r; // 移动到下一个节点}
}

完整代码

// 带头节点的逆置
void reverse(LNode*& L) {LNode *p = L->next, *r;L->next = NULL;while (p != NULL) {r = p->next;p->next = L->next;L->next = p;p = r;}
}// 不带头节点的逆置
void reverseNoHead(LNode*& L) {LNode *p = L, *r;L = NULL;while (p != NULL) {r = p->next;p->next = L;L = p;p = r;}
}

代码过程

  1. 初始化 p 指向第一个节点,L->nextNULL
  2. while 循环中,r 保存 p 的下一个节点。
  3. p->next 指向 L->next,即前一个逆置后的节点。
  4. L->next 更新为 p,即当前逆置的节点。
  5. p 移动到 r,即下一个待逆置的节点。
  6. 重复步骤2-5,直到 pNULL

假设我们有一个单链表:1 -> 2 -> 3 -> 4,我们将通过表格来展示每一步的变化。

步骤L->nextprp->nextL->next 更新p 更新
初始22NULL3NULL3
1NULL23433
2334NULL24
324NULLNULL1NULL

在逆置过程中,我们首先将头节点的 next 指针设置为 NULL,然后遍历链表,每次将当前节点的 next 指针指向前一个逆置后的节点,然后将头节点的 next 指针更新为当前节点,最后将当前节点更新为其下一个节点。

最终,链表将被逆置为:4 -> 3 -> 2 -> 1。

相关文章:

试编写算法将单链表就地逆置(默认是带头节 点,如果是不带头节点地逆置呢?)

编写一个算法来就地逆置一个单链表。默认情况下,链表是带头节点的,但如果链表不带头节点,逆置的过程会有所不同。 第一步:定义逆置函数 根据题目中的“试编写算法将单链表就地逆置”,我们需要: 定义一个…...

FPGA学习笔记#3 Vitis HLS编程规范、数据类型、基本运算

本笔记根据笔者目前的项目确定学习目标,目前主要集中在Vitis HLS上,使用的Vitis HLS版本为2022.2,在windows11下运行,仿真part为xcku15p_CIV-ffva1156-2LV-e,从这一篇开始是HLS的学习进度,主要根据教程&…...

爬虫 - 二手交易电商平台数据采集 (一)

背景: 近期有一个需求需要采集某电商网站平台的商品数据进行分析。因此,我计划先用Python实现一个简单的版本,以快速测试技术的实现可能性,再用PHP实现一个更完整的版本。文章中涉及的技术仅为学习和测试用途,请勿用于商业或非法用…...

“成交量分布指标“,通过筹码精准锁定价格方向+简单找市场支撑压力位 MT4免费公式!

指标名称:成交量分布指标 版本:MT4 ver. 1.32 之前发布的市场分布图不少朋友反馈不错,希望获得其它版本。 这个版本只有MT4的,MT5可以看之前版本,链接: “市场分布图”,精准把握价格动向 更直…...

简记Vue3(四)—— 路由

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…...

Python批量合并多个PDF

在日常工作中,处理和合并多个 PDF 文件是一个常见需求,尤其是在需要将大量文件整理成一个完整文档时。本文将详细介绍如何使用 Python 的 PyMuPDF 库来实现批量 PDF 文件合并,并提供针对大文件优化的解决方案。 安装 PyMuPDF 要使用 PyMuPD…...

Linux:vim命令总结及环境配置

文章目录 前言一、vim的基本概念二、vim模式命令解析1. 命令模式1)命令模式到其他模式的转换:2)光标定位:3)其他命令: 2. 插入模式3. 底行模式4. 替换模式5. 视图模式6. 外部命令 三、vim环境的配置1. 环境…...

贪心算法day05(k次取反后最大数组和 田径赛马)

目录 1.k次取反后最大化的数组和 2.按身高排序 3.优势洗牌 1.k次取反后最大化的数组和 题目链接:. - 力扣(LeetCode) 思路: 代码: class Solution {public int largestSumAfterKNegations(int[] nums, int k) {//如…...

默认 iOS 设置使已锁定的 iPhone 容易受到攻击

苹果威胁研究的八个要点 苹果手机间谍软件问题日益严重 了解 Apple 苹果的设备和服务器基础模型发布 尽管人们普遍认为锁定的 iPhone 是安全的,但 iOS 中的默认设置可能会让用户面临严重的隐私和安全风险。 安全研究员 Lambros 通过Pen Test Partners透露&#…...

上海市计算机学会竞赛平台2024年11月月赛丙组

题目描述 在一个棋盘上,有两颗棋子,一颗棋子在第 aa 行第 bb 列,另一个颗棋子在第 xx 行第 yy 列。 每一步,可以选择一个棋子沿行方向移动一个单位,或沿列方向移动一个单位,或同时沿行方向及列方向各移动…...

Python批量设置图片背景为透明

我们日常生活中制作PPT等教学资源时,需要批量去除图片背景,就可以使用 Python 的 rembg 库。 这个库基于神经网络模型,去背景效果较好,可以批量处理png, jpg, jpeg等图片。采用以下代码可以批量处理当前目录下的所有图片&#xf…...

Vue CLI 脚手架

cli脚手架创建项目步骤 全局安装(一次):yarn global add vue/cli 无法识别yarn的要先安装yarn;终端执行npm install -g yarn 查看Vue版本:vue --version 这里有问题(success上方有warning) 报错:‘vue’不是内部或外部…...

Linux【基础篇】

-- 原生罪 linux的入门安装学习 什么是操作系统? 用户通过操作系统和计算机硬件联系使用。桥梁~ 什么是Linux? 他是一套开放源代码(在互联网上找到Linux系统的源代码,C语言写出的软件),可以自由 传播&…...

多线程环境下安全地使用 SimpleDateFormat的常见方法

文章目录 1. 使用局部变量&#xff08;每个线程独立一个实例&#xff09;2. 使用 ThreadLocal<SimpleDateFormat>3. 使用 DateTimeFormatter&#xff08;Java 8 及以上&#xff09;4. 使用 DateFormat 子类&#xff08;如 FastDateFormat&#xff09;5. 使用 synchronize…...

easyexcel实现自定义的策略类, 最后追加错误提示列, 自适应列宽,自动合并重复单元格, 美化表头

easyexcel实现自定义的策略类, 最后追加错误提示列, 自适应列宽,自动合并重复单元格, 美化表头 原版表头和表体字体美化自动拼接错误提示列自适应宽度自动合并单元格使用Easyexcel使用poi导出 在后台管理开发的工作中,离不开的就是导出excel了. 如果是简单的导出, 直接easyexce…...

ANDROIDWORLD: A Dynamic Benchmarking Environment for Autonomous Agents论文学习

这个任务是基于androidenv的。这个环境之前学过&#xff0c;是一个用来进行强化学习的线上环境。而这篇文章的工作就是要给一些任务加上中间的奖励信号。这种训练环境的优点就是动态&#xff0c;与静态的数据集&#xff08;比如说我自己的工作&#xff09;不同&#xff0c;因此…...

Docker 常用命令详解(详细版)

Docker 是一个开源的容器化平台&#xff0c;它使得开发人员可以打包应用程序及其所有依赖项&#xff0c;并在任何环境中运行。Docker 提供了简单而强大的命令行工具来管理容器、镜像、网络等。本文将详细介绍 Docker 的常用命令及其使用方法。 1. 安装 Docker 在使用 Docker …...

【网络安全 | 甲方安全建设】分布式系统、Redis分布式锁及Redisson看门狗机制

未经许可,不得转载。 文章目录 分布式系统分布式系统的核心特性分布式系统的典型架构分布式锁概念Redis 分布式锁原理互斥性锁释放锁的唯一性具体实现Redisson分布式锁分布式系统 分布式系统是一种由多台计算机(节点)组成的系统,这些节点通过网络相互连接并协同工作,共同…...

「QT」几何数据类 之 QLineF 浮点型直线类

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「QT」QT5程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…...

Treeland 技术揭秘,如何使得 DDE 纵享丝滑?

近日&#xff0c;deepin&#xff08;深度&#xff09;社区亮相COSCon24 第九届中国开源年会开源市集&#xff0c;且社区资深桌面研发工程师张丁元为大家来了《Treeland&#xff0c;DDE进步的阶梯》技术分享。 就着这个机会&#xff0c;今天就让我们一起来聊聊如何在追求华丽动…...

TypeScript——编译器和编译选项

编译器和编译选项 1、编译器1.1、安装编译器1.1.1、--help、--all1.1.2、--version 2、编译程序2.1、编译单个文件2.2、编译多个文件2.3、--watch和-w2.4、--presserveWatchOutput 2、编译选项2.1、编译选项风格2.2、使用编译选项2.3、严格类型检查2.3.1、--strict2.3.2、--nol…...

深度解析Wiki.js操作日志系统:构建企业级安全监控的完整方案

深度解析Wiki.js操作日志系统&#xff1a;构建企业级安全监控的完整方案 【免费下载链接】wiki- Wiki.js | A modern and powerful wiki app built on Node.js 项目地址: https://gitcode.com/GitHub_Trending/wiki78/wiki- 当团队协作编辑Wiki内容时&#xff0c;你是否…...

为什么Stable Diffusion选择VQ-GAN?深入解析LDM背后的图像压缩技术

为什么Stable Diffusion选择VQ-GAN&#xff1f;深入解析LDM背后的图像压缩技术 在生成式AI领域&#xff0c;Stable Diffusion凭借其出色的图像生成质量和开源特性迅速成为行业标杆。但很少有人注意到&#xff0c;这个强大模型的核心竞争力之一&#xff0c;其实隐藏在它的第一阶…...

ChatGLM-6B真实反馈:用户对话满意度调查结果分享

ChatGLM-6B真实反馈&#xff1a;用户对话满意度调查结果分享 1. 引言&#xff1a;一次真实的对话体验调查 最近&#xff0c;我们围绕ChatGLM-6B智能对话服务进行了一次小范围的用户满意度调查。这不是一份冷冰冰的技术评测报告&#xff0c;而是一次真实的对话体验分享。我们邀…...

# WebNFC:让网页也能“碰一碰”实现设备交互的新可能随着移动互联网的快速发展,**近场通信(NFC)技术**逐渐从支付场景走

3 webNFC&#xff1a;让网页也能“碰一碰”实现设备交互的新可能 随着移动互联网的快速发展&#xff0c;近场通信&#xff08;NFC&#xff09;技术逐渐从支付场景走向更广泛的应用领域。而在浏览器端&#xff0c;**WebNFC ApI*8 的出现彻底改变了我们与 NFC 设备交互的方式——…...

Windows 11 + Ubuntu 20.04双系统安装避坑指南(附分区方案)

Windows 11与Ubuntu 20.04双系统安装全流程精解 对于想要在现有Windows 11系统上体验Ubuntu的用户来说&#xff0c;双系统安装是最佳选择。这种方式既能保留熟悉的Windows环境&#xff0c;又能探索Linux世界的无限可能。本文将详细解析从准备到安装的完整流程&#xff0c;特别针…...

BGE-Reranker-v2-m3批量处理优化:提升高并发排序效率

BGE-Reranker-v2-m3批量处理优化&#xff1a;提升高并发排序效率 你是不是也遇到过这样的问题&#xff1f;在搭建RAG系统时&#xff0c;向量检索返回了一大堆文档&#xff0c;但真正相关的却没几个。大模型拿着这些“噪音”文档生成答案&#xff0c;结果要么答非所问&#xff…...

三步掌握HiGHS线性优化求解器:从入门到实战

三步掌握HiGHS线性优化求解器&#xff1a;从入门到实战 【免费下载链接】HiGHS Linear optimization software 项目地址: https://gitcode.com/GitHub_Trending/hi/HiGHS 在数据分析与决策优化领域&#xff0c;如何高效解决资源分配、生产计划等线性规划问题一直是核心挑…...

DEFOM-Stereo vs RAFT-Stereo:双目匹配领域的新旧王者对比实测(附KITTI数据集结果)

DEFOM-Stereo与RAFT-Stereo&#xff1a;双目视觉技术的实战性能解析 在计算机视觉领域&#xff0c;双目立体匹配技术一直是实现三维场景重建和环境感知的核心方法之一。近年来&#xff0c;随着深度学习技术的快速发展&#xff0c;RAFT-Stereo等基于神经网络的双目匹配算法已经展…...

ESP32音频播放终极指南:5步打造专业级音乐播放器

ESP32音频播放终极指南&#xff1a;5步打造专业级音乐播放器 【免费下载链接】ESP32-audioI2S Play mp3 files from SD via I2S 项目地址: https://gitcode.com/gh_mirrors/es/ESP32-audioI2S ESP32-audioI2S是一个功能强大的开源音频库&#xff0c;专为ESP32、ESP32-S3…...