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

【山大909算法题】2014-T1

文章目录

  • 1.原题
  • 2.算法思想
  • 3.关键代码
  • 4.完整代码
  • 5.运行结果

1.原题

为带表头的单链表类Chain编写一个成员函数Reverse,该函数对链表进行逆序操作(将链表中的结点按与原序相反的顺序连接),要求逆序操作就地进行,不分配任何新的结点。要求首先给出类的声明,在类的声明中,其它成员函数省略。

2.算法思想

定义三个指针变量,*prevNode、*currentNode、*nextNode,在遍历过程中反指。对第一个元素和最后一个的元素处理略有不同,需要单独处理。

3.关键代码

/*** @struct ListNode* @brief 单链表中的节点结构。*/
struct ListNode {int data; /**< 节点中存储的数据 */struct ListNode *next; /**< 指向下一个节点的指针 */
};/*** @struct List* @brief 单链表结构。*/
struct List {struct ListNode *head; /**< 指向链表头节点的指针 */int size; /**< 链表的大小 */
};/*** @brief 反转链表中的元素。* @param list 指向 List 结构的指针。*/
void Reverse(struct List *list) {struct ListNode *prevNode = NULL, *currentNode = list->head->next, *nextNode = NULL;while (currentNode != NULL) {nextNode = currentNode->next; // 存储下一个节点currentNode->next = prevNode; // 反转指向前一个节点的指针prevNode = currentNode; // 移动指针以进行下一次迭代currentNode = nextNode;}list->head->next = prevNode; // 更新头指针,使其指向反转后的新的第一个节点
}

4.完整代码

#include <stdio.h>
#include <stdlib.h>/*** @struct ListNode* @brief 单链表中的节点结构。*/
struct ListNode {int data; /**< 节点中存储的数据 */struct ListNode *next; /**< 指向下一个节点的指针 */
};/*** @struct List* @brief 单链表结构。*/
struct List {struct ListNode *head; /**< 指向链表头节点的指针 */int size; /**< 链表的大小 */
};/*** @brief 反转链表中的元素。* @param list 指向 List 结构的指针。*/
void Reverse(struct List *list) {struct ListNode *prevNode = NULL, *currentNode = list->head->next, *nextNode = NULL;while (currentNode != NULL) {nextNode = currentNode->next; // 存储下一个节点currentNode->next = prevNode; // 反转指向前一个节点的指针prevNode = currentNode; // 移动指针以进行下一次迭代currentNode = nextNode;}list->head->next = prevNode; // 更新头指针,使其指向反转后的新的第一个节点
}/*** @brief 显示链表中的元素。* @param list 指向 List 结构的指针。*/
void displayList(struct List *list) {struct ListNode *currentNode = list->head->next;printf("head");while (currentNode != NULL) {printf("->%d", currentNode->data);currentNode = currentNode->next;}printf("->NULL\n");
}int main() {struct List list;list.head = (struct ListNode *) malloc(sizeof(struct ListNode));list.head->next = NULL;list.size = 0;// 插入初始元素 1, 2, 3, 4, 5for (int i = 1; i <= 5; ++i) {struct ListNode *newNode = (struct ListNode *) malloc(sizeof(struct ListNode));newNode->data = i;newNode->next = list.head->next;list.head->next = newNode;list.size++;}// 输出原始链表printf("Original List: ");displayList(&list);// 执行反转操作Reverse(&list);// 输出反转后的链表printf("Reversed List: ");displayList(&list);return 0;
}

5.运行结果

image-20231119220006799

相关文章:

【山大909算法题】2014-T1

文章目录 1.原题2.算法思想3.关键代码4.完整代码5.运行结果 1.原题 为带表头的单链表类Chain编写一个成员函数Reverse&#xff0c;该函数对链表进行逆序操作&#xff08;将链表中的结点按与原序相反的顺序连接&#xff09;&#xff0c;要求逆序操作就地进行&#xff0c;不分配…...

【MySQL实战45讲笔记】基础篇——深入浅出索引(上)

系列文章 基础篇——MySQL 的基础架构 基础篇——redo log 和 binlog 基础篇——事务隔离 目录 系列文章深入浅出索引&#xff08;上&#xff09;4.1 索引的常见模型4.2 InnoDB 的索引模型4.3 索引维护4.4 思考&#xff1a;为什么要重建索引以及如何做&#xff1f; 深入浅出索…...

通关C语言自定义类型:联合和枚举

C语言的自定义类型有四个分别是&#xff1a;数组&#xff1b;结构体&#xff08;struct&#xff09;&#xff1b;联合体&#xff08;union&#xff09;&#xff1b;枚举&#xff08;enum&#xff09;。前面已经讨论过数组和结构体&#xff0c;这期让我们来学习一下联合体和枚举…...

python高阶技巧一

闭包 简单认识一下闭包 以下代码&#xff0c;内层inner函数不仅依赖于自身的参数b&#xff0c;还依赖于外层outer函数的参数a。inner就是一个闭包函数&#xff0c;既能访问外部变量&#xff0c;又保证外部变量不是全局的&#xff0c;不会被篡改掉&#xff0c;确保了外部变量的…...

Java 对象头、Mark Word、monitor与synchronized关联关系以及synchronized锁优化

1. 对象在内存中的布局分为三块区域&#xff1a; &#xff08;1&#xff09;对象头&#xff08;Mark Word、元数据指针和数组长度&#xff09; 对象头&#xff1a;在32位虚拟机中&#xff0c;1个机器码等于4字节&#xff0c;也就是32bit&#xff0c;在64位虚拟机中&#xff0…...

鸿蒙网络编程系列50-仓颉版TCP回声服务器示例

1. TCP服务端简介 TCP服务端是基于TCP协议构建的一种网络服务模式&#xff0c;它为HTTP&#xff08;超文本传输协议&#xff09;、SMTP&#xff08;简单邮件传输协议&#xff09;等高层协议的应用程序提供了可靠的底层支持。在TCP服务端中&#xff0c;服务器启动后会监听一个或…...

软件测试基础(自动化测试、性能测试)

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 自动化测试的意义 缩短软件开发测试周期&#xff0c;可以让产品更快投放市场 测试效率高&#xff0c;充分利用硬件资源 节省人力资源&#xff0c;降低测试…...

C++中的原子操作:原子性、内存顺序、性能优化与原子变量赋值

一、原子操作与原子性 原子操作&#xff08;atomic operation&#xff09;是并发编程中的一个核心概念&#xff0c;指的是在多线程环境中&#xff0c;一个操作一旦开始&#xff0c;就不会被其他线程的操作打断&#xff0c;直至该操作完成。这种不可分割的特性保证了操作的原子…...

游戏引擎学习第19天

介绍 这段内容描述了开发者在进行游戏开发时&#xff0c;对于音频同步和平台层的理解和调整的过程。以下是更详细的复述&#xff1a; 开发者表达了他希望今天继续进行的工作内容。他提到&#xff0c;昨天他讲解了一些关于音频的内容&#xff0c;今天他想稍微深入讲解一下他正…...

RocketMQ: 专业术语以及相关问题解决

概述 要了解 RocketMQ 的多个关键特性的实现原理&#xff0c;并对消息中间件遇到的各种问题进行解决我们引用 JMS 规范 与 CORBA Notification 规范&#xff0c;规范为我们设计系统指明了方向但是仍有不少问题规范没有提及&#xff0c;对于消息中间件又至关重要RocketMQ 并不遵…...

C++ 类和对象中的 拷贝构造 和 运算符重载

构造函数中可以添加参数并添加默认值构成缺省构造&#xff0c;如果我们在构造函数的参数中加上自身类型类的引用和其他给出默认值的参数则会构成一种特殊的构造函数叫做———拷贝构造函数 1.拷贝构造 拷贝构造的特点&#xff1a; 1.拷贝构造函数是构造函数的一个重载 2.拷…...

el-table最大高度无法滚动

解决el-table同时使用fixed和计算的最大高度时固定右边的列无法跟随滚动的问题 原因&#xff1a;el-table组件会根据传入的 max-height 计算表格内容部分 和 fixed部分的最大高度&#xff0c;以此来生成滚动条和产生滚动效果&#xff0c;当传入的 max-height 为一个计算的高度…...

Vscode写markdown快速插入python代码

如图当我按下快捷键CRTLSHIFTK 自动出现python代码片段 配置方法shortcuts’ 打开这个json文件 输入 {"key": "ctrlshiftk","command": "editor.action.insertSnippet","when": "editorTextFocus","args&…...

基于 NCD 与优化函数结合的非线性优化 PID 控制

基于 NCD 与优化函数结合的非线性优化 PID 控制 1. 引言 NCD&#xff08;Normalized Coprime Factorization Distance&#xff09;优化是一种用于非线性系统的先进控制方法。通过将 NCD 指标与优化算法结合&#xff0c;可以在动态调整控制参数的同时优化控制器性能。此方法特别…...

【数据分析】基于GEE实现大津算法提取洞庭湖流域水体

大津算法提取水体 1.写在前面2.洞庭湖水体识别1.写在前面 最大类间方差法,也称为Otsu或大津法,是一种高效的图像二值化算法,由日本学者Otsu于1979年提出。该算法基于图像的频率分布直方图,假设图像包含两类像素(前景和背景),并计算出一个最佳阈值,以最大化类间方差,从…...

计算机网络安全 —— 报文摘要算法 MD5

一、报文摘要算法基本概念 ​ 使用加密通常可达到报文鉴别的目的&#xff0c;因为伪造的报文解密后一般不能得到可理解的内容。但简单采用这种方法&#xff0c;计算机很难自动识别报文是否被篡改。另外&#xff0c;对于不需要保密而只需要报文鉴别的网络应用&#xff0c;对整个…...

LeetCode 746. 使用最小花费爬楼梯 java题解

https://leetcode.cn/problems/min-cost-climbing-stairs/description/ 优化&#xff1a;可以不用dp数组&#xff0c;用变量&#xff0c;节省空间。 class Solution {public int minCostClimbingStairs(int[] cost) {int lencost.length;int[] dpnew int[len1];dp[0]0;//爬到0…...

Kubernetes的pod控制器

文章目录 一&#xff0c;什么是pod控制器二&#xff0c;pod控制器类型&#xff08;重点&#xff09;1.ReplicaSet2.Deployment3.DaemonSet4.StatefulSet5.Job6.Cronjob 三&#xff0c;pod与控制器的关系1.Deployment2.SatefulSet2.1StatefulSet组成2.2headless的由来2.3有状态服…...

ArcMap 处理栅格数据地形图配准操作

ArcMap 处理栅格数据地形图配准操作今天分享 一、地形图配准 1、绘图 点击 开始绘制&#xff0c;四条线 2、地理配准 1&#xff09;点击弹出 2&#xff09;画控制点 关闭自动校正 画线 从焦点向外划线&#xff0c;然后邮件输入坐标弹出框&#xff0c;填写相应内容&#xff0c…...

comprehension

1.读题---猜---文章主题 只读题目&#xff0c;不读选项 2.文章--定位 3.用文章对应选项 1 be based on be dependent upon 2 fruitful adj.富有成效的;硕果累累的; 3 unfruitful adj.徒然的&#xff0c;无益的&#xff0c;没有结果的 4 desperately adv.拼命地&#x…...

高纯水系统如何保障锂电池生产良率?

在锂电池制造过程中&#xff0c;生产用水纯度直接关联产品性能与安全。随着新能源汽车与储能产业快速发展&#xff0c;行业对电池一致性与稳定性的要求持续提升&#xff0c;超纯水已成为核心制程环节的关键辅材。一、锂电池生产用水标准 锂电池生产涉及正负材料制备、浆料调配、…...

大以论文与万方、维普、WPS AI 综合对比(2026)

毕业季论文格式问题频发&#xff0c;手动排版耗时、通用模板不匹配、公式图表易错乱是常态。万方、维普以查重为主&#xff0c;WPS AI 偏向通用办公&#xff0c;而大以论文作为7 年专注毕业论文排版的老牌工具&#xff0c;在专业性、稳定性与院校适配性上更具优势。一、核心对比…...

Comsol水力压裂:渗流 - 应力 - 损伤耦合模型探索

Comsol水力压裂 渗流-应力-损伤耦合模型 本模型采用Comsol软件模拟注水过程中的岩石损伤和孔隙水压发展&#xff0c;采用经典摩尔库伦准则和抗拉阶段准则计算损伤 无需借MATLAB计算损伤变量在Comsol里面采用内置模块计算损伤变量&#xff0c;计算效率高 岩石采用Weibull分布描述…...

本科论文降AI率花多少钱合适?各档工具对比

每年毕业季都有同学问&#xff1a;降AI率要花多少钱&#xff1f;买个工具值不值&#xff1f;这篇把费用账算清楚&#xff0c;让你心里有数。 先算清楚你实际需要处理多少字 很多人有个误区&#xff0c;以为论文AI率30%就要处理30%的字数。实际上不是的。 实际需要处理的字数…...

OPAL速率限制终极指南:如何有效控制策略更新频率

OPAL速率限制终极指南&#xff1a;如何有效控制策略更新频率 【免费下载链接】opal Policy and data administration, distribution, and real-time updates on top of Policy Agents (OPA, Cedar, ...) 项目地址: https://gitcode.com/gh_mirrors/opal1/opal 在分布式策…...

S-UI系统调用分析:与操作系统交互的底层实现

S-UI系统调用分析&#xff1a;与操作系统交互的底层实现 还在为网络代理管理系统的底层实现而困惑&#xff1f;本文将深入解析S-UI如何通过系统调用与操作系统深度交互&#xff0c;让你全面掌握这套高级Web面板的底层工作原理。 读完本文你将了解&#xff1a; S-UI如何处理系…...

手把手教程:快速设置远程开机,看完就会

今天就给大家带来一份完整、可直接照着操作的远程开机教程&#xff0c;即可实现无需公网 IP、一键远程唤醒&#xff0c;随时随地让设备为你待命。设备支持检查确认主板支持WAKE-ON-LAN&#xff08;网络唤醒&#xff09;功能&#xff0c;局域网内需具备两台设备&#xff1a;目标…...

c++如何通过文件映射mmap在多进程间实现高性能数据共享【进阶】

mmap 多进程共享必须用 MAP_SHARED&#xff0c;因其确保所有进程映射同一物理页并同步回文件&#xff1b;MAP_PRIVATE 为写时复制&#xff0c;修改不共享。需 O_RDWR 打开、ftruncate 预设大小&#xff0c;并配合适当同步机制。为什么 mmap 在多进程共享中必须用 MAP_SHARED 而…...

EVA-01应用实战:5个场景教你用Qwen2.5-VL处理工作学习中的图片难题

EVA-01应用实战&#xff1a;5个场景教你用Qwen2.5-VL处理工作学习中的图片难题 1. 引言&#xff1a;当视觉理解遇上机甲美学 想象一下&#xff0c;你正在处理一份满是手写笔记的文档照片&#xff0c;或者需要快速理解一张复杂的数据图表。传统方法可能需要你手动输入文字、反…...

基于粒子群算法(PSO)的宽带消色差超透镜Matlab核心程序探秘

基于粒子群算法PSO宽带消色差超透镜matlab核心程序有注释便于理解代码的含义&#xff0c;包含FDTD仿真&#xff0c;文章复现案例讲解&#xff0c;适合学习几何相位和传输相位&#xff0c;消色差效果很好可以对代码进行优化在光学领域&#xff0c;宽带消色差超透镜是一个热门的研…...