所有题目均有五种语言实现。C实现目录、C++ 实现目录、Python实现目录、Java实现目录、JavaScript实现目录
题目
求单向链表中间的节点值,如果奇数个节点取中间,偶数个取偏右边的那个值。
输入描述:
第一行 链表头节点地址path 后续输入的节点数n
后续输入每行表示一个节点,格式: "节点地址 节点值 下一个节点地址(-1表示空指针)“
输入保证链表不会出现环,并且可能存在一些节点不属于链表。
输出描述:
链表中间节点值。
测试用例:
输入:
00010 4
00000 3 -1
00010 5 12309
11451 6 00000
12309 7 11451输出:
6
思路
解析输入
第一行:获取 头节点地址 和 节点数
n
。后续
n
行:建立 节点映射表{地址 → {值, next}}
,同时 记录所有节点地址。重建链表
从
head
开始 遍历链表,找出 真正属于链表的节点顺序。寻找中间节点
双指针法:
快指针
fast
每次 走 2 步。慢指针
slow
每次 走 1 步。
fast
走到 链表尾部 时,slow
刚好在 中间节点。
考点
1:数据结构
Code
function findMiddleNode(input) {
let lines = input.trim().split("\n");
let [head, n] = lines[0].split(" ");
n = parseInt(n);
let nodeMap = new Map(); // 存储 {地址 → {值, next}}
for (let i = 1; i <= n; i++) {
let [addr, value, next] = lines[i].split(" ");
nodeMap.set(addr, { value: parseInt(value), next });
}
// 重建链表,找到真正的节点顺序
let nodeList = [];
let current = head;
while (current !== "-1" && nodeMap.has(current)) {
nodeList.push(nodeMap.get(current).value);
current = nodeMap.get(current).next;
}
// 快慢指针找中间节点
let slow = 0, fast = 0;
while (fast < nodeList.length - 1) {
slow++;
fast += 2;
}
return nodeList[slow]; // 返回中间节点值
}
// 示例测试
let input1 = `00010 4
00000 3 -1
00010 5 12309
11451 6 00000
12309 7 11451`;
console.log(findMiddleNode(input1)); // 输出: 6
要求
时间限制:C/C++ 1秒,其他语言 2秒
空间限制:C/C++262144K,其他语言524288K
64bit IO Format:%lld
语言限定:
C(clang11), C++(clang++11), Pascal(fpc 3.0.2), Java(javac 1.8), Python2(2.7.3),
PHP(7.4.7), C#(mcs5.4), ObjC(gcc 5.4), Pythen3(3.9), JavaScript Node(12.18.2), JavaScript V8(6.0.0),
Sqlite(3.7.9), R(4.0.3), Go(1.14.4), Ruby(2.7.1), Swift(5.3), matlab(Octave 5.2), Pypy2(pypy2.7.13),
Pypy3(pypy3.6.1), Rust(1.44), Scala(2.11.12), Kotlin(1.4.10), Groovy(3.0.6), TypeScript(4.1.2), Mysql(8.0)
更多题目链接:
华为OD 2025 最新最全机试题库及讲解,A+B+C+D+E卷题库大全。
Java题库: 2024华为OD机试(JAVA)真题【E卷+A卷+B卷+C卷+D卷】目录_华为od机试真题-CSDN博客
Python题库: 2024华为OD机试(Python)真题【E卷+A卷+B卷+C卷+D卷】目录_华为od机试好过吗-CSDN博客
C++题库: 2024华为OD机试(C++)真题【E卷+A卷+B卷+C卷+D卷】目录_华为od怎么知道考的是a卷还是b卷-CSDN博客
Js题库: 2024 华为OD机试(JavaScript)真题【E卷+A卷+B卷+C卷+D卷】目录_华为od 2023 q2b卷-CSDN博客