华为OD机试 - 单向链表中间节点(Python/JS/C/C++ 2024 E卷 200分)

在这里插入图片描述

华为OD机试 2024E卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

求单向链表中间的节点值,如果奇数个节点取中间,偶数个取偏右边的那个值。

二、输入描述

第一行 链表头节点地址 后续输入的节点数 n
后续输入每行表示一个节点,格式:节点地址 节点值 节点地址 下一个节点地址(-1 表示空指针 Q)

输入保证链表不会出现环,并且可能存在一些节点不属于链表。

三、输出描述

单向链表中间的节点值

四、测试用例

测试用例1:

1、输入

00010 4
00000 3 -1
00010 5 12309
11451 6 00000
12309 7 11451

2、输出

6

3、说明

链表顺序为:00010 (5) -> 12309 (7) -> 11451 (6) -> 00000 (3)
总节点数为 4,偶数,取第 3 个节点的值为 6。

测试用例2:

1、输入

10000 3
76892 7 12309
12309 5 -1
10000 1 76892

2、输出

7

3、说明

链表顺序为:10000 (1) -> 76892 (7) -> 12309 (5)
总节点数为 3,奇数,取第 2 个节点的值为 7。

五、解题思路

  1. 输入读取:
    • 使用 Scanner 从标准输入读取链表的头节点地址和节点总数 n。
    • 读取接下来的 n 行,每行包含一个节点的地址、值和下一个节点的地址。
    • 使用 HashMap<String, Node> 将节点地址映射到对应的 Node 对象,便于快速查找节点。
  2. 链表遍历:
    • 从头节点地址开始,依次通过 next 地址遍历链表。
    • 将遍历到的每个节点的值存储在 List nodeValues 中。
    • 如果遇到地址为 -1,表示链表结束;或者当前地址在 HashMap 中不存在,表示链表异常结束。
  3. 中间节点查找:
    • 根据链表长度 size 计算中间节点的索引 middleIndex。
    • 对于奇数个节点,middleIndex = size / 2,例如 5 个节点,索引为 2。
    • 对于偶数个节点,middleIndex = size / 2,例如 4 个节点,索引为 2(偏右)。
    • 输出中间节点的值。
  4. 辅助类:
    • Node 类用于表示链表中的每个节点,包含地址、值和下一个节点的地址。

六、Python算法源码

# 导入所需的模块
import sysdef main():# 读取输入input = sys.stdin.read().split()idx = 0# 读取链表头节点地址和节点总数 nhead_address = input[idx]idx += 1n = int(input[idx])idx += 1# 使用字典存储所有节点的信息,键为节点地址,值为(值, 下一个节点地址)node_map = {}for _ in range(n):address = input[idx]idx += 1value = int(input[idx])idx += 1next_address = input[idx]idx += 1node_map[address] = (value, next_address)# 遍历链表,按顺序收集节点的值node_values = []current_address = head_addresswhile current_address != "-1":if current_address not in node_map:# 如果当前地址不存在于 node_map 中,链表结束breakcurrent_node = node_map[current_address]node_values.append(current_node[0])current_address = current_node[1]# 判断链表是否为空if not node_values:print("链表为空。")else:# 计算中间节点的索引size = len(node_values)middle_index = size // 2  # 对于偶数,取偏右边的节点print(node_values[middle_index])if __name__ == "__main__":main()

七、JavaScript算法源码

// 定义节点类,表示链表中的每个节点
class Node {constructor(address, value, next) {this.address = address; // 节点地址this.value = value;     // 节点值this.next = next;       // 下一个节点的地址}
}// 主函数
function main() {const fs = require('fs');const input = fs.readFileSync('/dev/stdin').toString().trim().split(/\s+/);let idx = 0;// 读取链表头节点地址和节点总数 nconst headAddress = input[idx++];const n = parseInt(input[idx++]);// 使用对象存储所有节点的信息,键为节点地址,值为 Node 对象const nodeMap = {};for (let i = 0; i < n; i++) {const address = input[idx++];const value = parseInt(input[idx++]);const next = input[idx++];nodeMap[address] = new Node(address, value, next);}// 遍历链表,按顺序收集节点的值const nodeValues = [];let currentAddress = headAddress;while (currentAddress !== "-1") {if (!(currentAddress in nodeMap)) {// 如果当前地址不存在于 nodeMap 中,链表结束break;}const currentNode = nodeMap[currentAddress];nodeValues.push(currentNode.value);currentAddress = currentNode.next;}// 判断链表是否为空if (nodeValues.length === 0) {console.log("链表为空。");} else {// 计算中间节点的索引const size = nodeValues.length;const middleIndex = Math.floor(size / 2); // 对于偶数,取偏右边的节点console.log(nodeValues[middleIndex]);}
}// 执行主函数
main();

八、C算法源码

#include <stdio.h>
#include <string.h>
#include <stdlib.h>// 定义最大地址长度
#define MAX_ADDR_LEN 20// 定义节点结构体
typedef struct Node {char address[MAX_ADDR_LEN]; // 节点地址int value;                   // 节点值char next[MAX_ADDR_LEN];    // 下一个节点的地址
} Node;// 主函数
int main() {char headAddress[MAX_ADDR_LEN];int n;// 读取链表头节点地址和节点总数 nscanf("%s %d", headAddress, &n);// 使用数组存储所有节点的信息Node *nodeMap = (Node *)malloc(n * sizeof(Node));for (int i = 0; i < n; i++) {scanf("%s %d %s", nodeMap[i].address, &nodeMap[i].value, nodeMap[i].next);}// 遍历链表,按顺序收集节点的值int *nodeValues = (int *)malloc(n * sizeof(int));int count = 0;char currentAddress[MAX_ADDR_LEN];strcpy(currentAddress, headAddress);while (strcmp(currentAddress, "-1") != 0) {int found = 0;for (int i = 0; i < n; i++) {if (strcmp(nodeMap[i].address, currentAddress) == 0) {nodeValues[count++] = nodeMap[i].value;strcpy(currentAddress, nodeMap[i].next);found = 1;break;}}if (!found) {// 如果当前地址不存在于 nodeMap 中,链表结束break;}}// 判断链表是否为空if (count == 0) {printf("链表为空。\n");} else {// 计算中间节点的索引int middleIndex = count / 2; // 对于偶数,取偏右边的节点printf("%d\n", nodeValues[middleIndex]);}// 释放动态分配的内存free(nodeMap);free(nodeValues);return 0;
}

九、C++算法源码

#include <iostream>
#include <unordered_map>
#include <vector>
#include <string>using namespace std;// 定义节点结构体
struct Node {string address; // 节点地址int value;      // 节点值string next;    // 下一个节点的地址
};int main() {string headAddress;int n;// 读取链表头节点地址和节点总数 ncin >> headAddress >> n;// 使用无序映射存储所有节点的信息,键为节点地址,值为 Node 结构体unordered_map<string, Node> nodeMap;for (int i = 0; i < n; ++i) {string address, next;int value;cin >> address >> value >> next;nodeMap[address] = Node{address, value, next};}// 遍历链表,按顺序收集节点的值vector<int> nodeValues;string currentAddress = headAddress;while (currentAddress != "-1") {if (nodeMap.find(currentAddress) == nodeMap.end()) {// 如果当前地址不存在于 nodeMap 中,链表结束break;}Node currentNode = nodeMap[currentAddress];nodeValues.push_back(currentNode.value);currentAddress = currentNode.next;}// 判断链表是否为空if (nodeValues.empty()) {cout << "链表为空。" << endl;} else {// 计算中间节点的索引int size = nodeValues.size();int middleIndex = size / 2; // 对于偶数,取偏右边的节点cout << nodeValues[middleIndex] << endl;}return 0;
}

🏆下一篇:华为OD机试真题 - 简易内存池(Python/JS/C/C++ 2024 E卷 200分)

🏆本文收录于,华为OD机试真题(Python/JS/C/C++)

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

使用Spring Security实现用户-角色-资源的权限控制

文章目录 一、基于角色的请求控制二、加载用户角色信息三、角色与资源的关联四、测试角色权限控制1. 未登录用户访问受保护资源2. 登录用户访问受保护资源3. 角色不足的用户访问受保护资源&#xff08;把前面改成.roles("USER")&#xff09; 五、自定义异常处理1. 自…

数学建模算法与应用 第3章 非线性规划及其求解方法

目录 3.1 非线性规划概述 3.2 约束优化问题 3.3 无约束优化问题的Matlab求解 3.4 牛顿法与梯度下降法 Matlab代码示例&#xff1a;梯度下降法求解简单非线性问题 3.5 非线性规划在机器学习中的应用 习题 3 总结 非线性规划&#xff08;Nonlinear Programming, NLP&…

华为OD机试 - 人数最多的站点(Java 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;E卷D卷A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加…

A2P云短信,是什么意思?

中国联通国际公司产品之 A2P 云短信 一站式国际通信服务&#xff0c;助力企业拓展国际业务&#xff0c;轻松触达全球客户 在全球化日益加深的今天&#xff0c;企业要想在竞争激烈的国际市场中脱颖而出&#xff0c;不仅需要优质的产品和服务&#xff0c;更需要高效的沟通渠道来…

系统架构设计师 - 案例特训专题 - 架构设计篇

案例特训专题 - 架构设计篇 架构设计篇软件架构风格 ★★★★质量属性与架构评估 ★★★★★Web 架构综合考查 ★★★★★单台机器到数据库与Web服务器分离应用服务器集群负载均衡技术Session共享机制持久化技术 ORM数据库读写分离化缓存常见缓存技术Redis 集群切片的常见方式R…

DAMA数据管理知识体系(第5章 数据建模和设计)

课本内容 5.1 引言 概要 常见6种数据模式 关系模式多维模式面向对象模式事实模式时间序列模式NoSQL模式按照描述详细程度不同分类 概念模型逻辑模型物理模型包含组件 实体、关系、事实、键、属性业务驱动因素 1&#xff09;提供有关数据的通用词汇表。2&#xff09;获取、记录组…

SQL Server 2022 RTM Cumulative Update #15 发布下载

SQL Server 2022 RTM Cumulative Update #15 发布下载 最新的累积更新 (CU) 下载&#xff0c;包含自 SQL Server 2022 RTM 发布以来的所有更新。 请访问原文链接&#xff1a;https://sysin.org/blog/sql-server-2022/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留…

职称申报材料整理需要注意哪些方面呢?

相信不少小伙伴都想评完职称&#xff0c;最后可以升职加薪领补贴等等&#xff0c;但是不知道申请具体需要哪些材料❓❗ 今天甘建二给大家整理出20个工程专业职称评审的必备材料&#xff0c;必须码住&#xff0c;千万别错过啦 &#xfffd;&#xfffd;01、业绩材料 ⭕反应任现…

PCL 计算点云AABB包围盒

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 计算AABB 2.1.2 可视化AABB 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实战案例汇总&#xff08;长期更新&#xff09;…

ChatGPT国内中文版镜像网站整理合集(2024/9/30)

一、GPT中文镜像站 ① yixiaai.com 支持GPT4、4o以及o1&#xff0c;支持MJ绘画 ② chat.lify.vip 支持通用全模型&#xff0c;支持文件读取、插件、绘画、AIPPT ③ AI Chat 支持GPT3.5/4&#xff0c;4o以及MJ绘画 1. 什么是镜像站 镜像站&#xff08;Mirror Site&#xff…

如何实现不同VLAN间互通?

问题描述 客户要求不同VLAN的PC机互通&#xff0c;如下图拓扑所示。 此外&#xff0c;仅允许在设备 LSW3 上进行配置修改。 分析 由于所有的PC都在同一个网段&#xff0c;当任何一个设备想要和另一个设备通信时&#xff0c;它会首先根据数据交互的流程广播一个ARP请求报文来获…

微服务架构Gin-etcd-gRPC接合的入门实践

最近在学习微服务&#xff0c;先后学习gRPC、etcd。学习过这两个技术之后&#xff0c;结合Gin框架&#xff0c;简单实现了一个微服务的小demo了。 以下是各技术在微服务架构中的功能。 Gin框架作为网关&#xff0c;外部请求的统一出口。负责将外部的HTTP请求转化为RPC请求&…

量子数字签名概述

我们都知道&#xff0c;基于量子力学原理研究密钥生成和使用的学科称为量子密码学。其内容包括了量子密钥分发、量子秘密共享、量子指纹识别、量子比特承诺、量子货币、秘密通信扩展量子密钥、量子安全计算、量子数字签名、量子隐性传态等。虽然各种技术发展的状态不同&#xf…

YOLOv8实战TT100K中国交通标志检测【数据集+YOLOv8模型+源码+PyQt5界面】

YOLOv8实战TT100k交通标志识别 文章目录 研究背景资源获取1.前言1.1 YOLO 系列&#xff1a;中国交通标志检测领域的璀璨明星1.2 Transformer与注意力机制&#xff1a;为中国交通标志检测注入新活力1.3 中国交通标志检测技术&#xff1a;迎接挑战&#xff0c;砥砺前行1.4 YOLOv8…

『网络游戏』协程回调事件实现Tips弹窗【09】

创建脚本&#xff1a;DynamicWnd.cs 编写脚本&#xff1a;DynamicWnd.cs 修改脚本&#xff1a;WindowRoot.cs - 适配修改错误 修改脚本&#xff1a;GameRoot.cs 拖拽框选 运行项目 - 显示Tips弹窗 本章结束

3.C语言入门:解锁基础概念,动手实现首个C程序

C语言入门&#xff1a;解锁基础概念&#xff0c;动手实现首个C程序 文章目录 C语言入门&#xff1a;解锁基础概念&#xff0c;动手实现首个C程序前言一、源文件和头文件1.1 如何新建项目1.2 添加头文件和源文件 二、第一个C语言程序1.创建一个源文件2.写代码3.运行代码 三、mai…

水库大坝安全监测预警系统守护大坝安全卫士

一、系统背景 近年来&#xff0c;受全球气候变化和人类活动影响&#xff0c;极端天气发生频度强度增加&#xff0c;加之我国城市化进程中&#xff0c;水库下游人口聚集、基础设施密集&#xff0c;对水库工程安全运行提出了新的更高要求。“十四五”以来我国建成并投入使用37593…

微服务架构---认识Zuul

目录 认识Zuul简单的例子 第一个Zuul程序步骤1&#xff1a;创建父工程zuul-1步骤2&#xff1a;创建HystrixController类步骤3&#xff1a;搭建服务消费者eureka-consumer项目&#xff08;1&#xff09;创建一个config包&#xff0c;在config包下新建配置类RestConfig&#xff0…

跨境卖家品牌出海要注意哪些方面

随着目前互联网的发展&#xff0c;市场由线下扩张到全国&#xff0c;再扩张到了全球&#xff0c;但是海外市场和国内并不相同跨境卖家品牌想要出海&#xff0c;需要注意多个方面&#xff0c;以确保能够在国际市场上成功立足并发展。以下是一些关键点&#xff1a; 首先想得拥有…

基于matlab的语音信号处理

摘要 利用所学习的数字信号处理知识&#xff0c;设计了一个有趣的音效处理系统&#xff0c;首先设计了几种不同的滤波器对声音进行滤波处理&#xff0c;分析了时域和频域的变化&#xff0c;比较了经过滤波处理后的声音与原来的声音有何变化。同时设计实现了语音的倒放&#xf…