当前位置: 首页 > 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;今天就让我们一起来聊聊如何在追求华丽动…...

快速了解SpringBoot 统一功能处理

拦截器 什么是拦截器&#xff1a; 拦截器是Spring框架提供的重要功能之一&#xff0c;主要进行拦截用户请求&#xff0c;在指定方法前后&#xff0c;根据业务需求&#xff0c;执行预先设定的代码。 也就是说,允许开发⼈员提前预定义⼀些逻辑,在⽤⼾的请求响应前后执⾏.也可以…...

C++区分数组的引用和引用的数组

void f(int (&arr)[10]) {//正确} void f1(int &arr[10]) {//不允许使用引用的数组} []&#xff08;数组下标运算符&#xff09;的优先级高于&&#xff08;取地址运算符&#xff09;。所有表达式&arr[i]等价于&(arr[i]) 引用的数组 一个包含引用的数组&…...

【harbor】离线安装2.9.0-arm64架构服务制作和升级部署

harbor官网地址&#xff1a;Harbor 参考文档可以看这里&#xff1a;部署 harbor 2.10.1 arm64 - 简书。 前提环境准备&#xff1a; 安装docker 和 docker-compose 先拉arm64架构的harbor相关镜像 docker pull --platformlinux/arm64 ghcr.io/octohelm/harbor/harbor-regist…...

ESLint 使用教程(五):ESLint 和 Prettier 的结合使用与冲突解决

前言 在现代前端开发中&#xff0c;代码质量与代码风格的统一是两个非常重要的方面。良好的代码质量能减少 bug 的产生&#xff0c;而统一的代码风格则能提高团队协作的效率。为了实现这两个目标&#xff0c;我们通常会使用一些工具。 为了保证代码的可读性和维护性&#xff0…...

uniApp之uni-file-picker使用踩坑

标题党~也不算坑吧 就是初体验 上传是需要存储一下子的&#xff0c;我以为uniApp是自己免费开的服务给大家中转使用&#xff0c;就没管这个事&#xff0c;但是官网是这么说的&#xff1a; 就我是怎么发现的&#xff0c;使用了一段时间后&#xff0c;上传的图片都裂了&#xff…...

【C语言】。末尼

用js写一个冒泡排序 当然可以。在JavaScript中&#xff0c;你可以使用递归的方式来实现冒泡排序算法。这是一个简单的示例&#xff1a; function bubbleSort(arr) { let len arr.length; if(len < 1){ return arr; // 如果数组只有一个元素或为空&#xf…...

【鉴权】深入解析 Token:身份认证的核心技术

目录 引言一、Token 的定义与概念1.1 Token 是什么&#xff1f;1.2 无状态性与自包含性1.3 Token 的工作流程1.3.1 基本工作流程1.3.2 工作流程图示 二、Token 的常见用途2.1 用户身份验证2.2 授权控制2.3 防止跨站请求伪造&#xff08;CSRF&#xff09;2.4 跨域认证 三、Token…...

FastReport将停止 .NET Framework 上的 WebReport 更新

从2024/ 12 /1 日起&#xff0c;Fastreport将停止发布更新和提供对 FastReport.Web (.NET Framework) 的技术支持。该库一直是使用 Online Designer 的许多项目中报告的核心。这些更改意味着 FastReport.Web (Legacy) 库&#xff08;FastReport.Net包的一部分&#xff09;将不再…...

面试:TCP、UDP如何解决丢包问题

文章目录 一、TCP丢包原因、解决办法1.1 TCP为什么会丢包1.2 TCP传输协议如何解决丢包问题1.3 其他丢包情况&#xff08;拓展&#xff09;1.4 补充1.4.1 TCP端口号1.4.2 多个TCP请求的逻辑1.4.3 处理大量TCP连接请求的方法1.4.4 总结 二、UDP丢包2.1 UDP协议2.1.1 UDP简介2.1.2…...

在Ubuntu下安装RabbitMQ、添加一个新的登录用户并设置密码

在Ubuntu下安装RabbitMQ、添加一个新的登录用户并设置密码 在Ubuntu下安装RabbitMQ可以按照以下步骤进行&#xff1a;步骤 1: 更新系统步骤 2: 安装Erlang步骤 3: 添加RabbitMQ仓库步骤 4: 更新APT索引并安装RabbitMQ步骤 5: 启动RabbitMQ服务步骤 6: 检查RabbitMQ状态步骤 7: …...

网站开发的难点/郑州网站建设公司排行榜

一、全值匹配 EXPLAIN SELECT * FROM employees WHERE name LiLei; EXPLAIN SELECT * FROM employees WHERE name LiLei AND age 22; EXPLAIN SELECT * FROM employees WHERE name LiLei AND age 22 AND position manage r; 二、最左前缀法则 如果索引了多列&#xff0c;要…...

服务行业做网站/每日舆情信息报送

做互联网的人都习惯把一切搬到互联网上进行&#xff1a;网站浏览、邮件、IM、网上办公、文件共享……甚至现在连订餐都流行网上去做。不知道将来上厕所能不能在网上订马桶&#xff1f;互联网本来是人类活动的延伸&#xff0c;是人类活动的另一种形式。但我们进入互联网之后好像…...

帮人做钓鱼网站以及维护/搜索引擎怎么做

struct Node {int a,b; }; 上面定义了这样一个结构体 struct Node t {1,2}; 我们需要先理解这句话的含义。这样进行一个初始化&#xff0c;那么{1, 2}&#xff0c;你可以认为是内存中的某块区域已经分配给你了&#xff0c;其中的值就是{1, 2}。而前面的t呢&#xff0c;就…...

可以合成装备的传奇手游/搜索引擎优化的方式

但作为专业人士&#xff0c;此时&#xff0c;应该来一波专业的回答&#xff0c;故事的起源是这样的&#xff1a;从前&#xff0c;有家叫 Netscape 的公司开发了一个名叫 Livescript 的脚本语言&#xff0c;但是&#xff0c;开发出来之后呢&#xff1f;一直没啥名气。公司正当愁…...

内蒙古网站制作/aso具体优化

那个百分十先生&#xff1a;Python操作Excel的Xlwings教程&#xff08;五&#xff09;​zhuanlan.zhihu.com前几篇文章写的是关于Xlwings的相关知识&#xff0c;介绍了其相关API的使用方法&#xff0c;大家在使用Xlwing对Excel进行操作的时候&#xff0c;就可以使用推文中介绍的…...

网站开发需要哪些人员/网络营销公司有哪些

1.给群发送消息 ①首先需要放置一个自定义机器人&#xff08;在个人信息下方的机器人管理里面&#xff09;&#xff0c;并选择你想要接收消息的群&#xff0c;之后取得这个机器人的webhook地址。 ②写一个测试类&#xff0c;测试能不能用该方法给钉钉发送消息。方法的具体实现…...