华为OD机试真题A卷 JavaScript 实现【单向链表中间节点】

         所有题目均有五种语言实现。C实现目录C++ 实现目录Python实现目录Java实现目录JavaScript实现目录

题目

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

输入描述:

第一行 链表头节点地址path 后续输入的节点数n

后续输入每行表示一个节点,格式:   "节点地址  节点值  下一个节点地址(-1表示空指针)“

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

输出描述:

链表中间节点值。

测试用例:

输入:

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

输出:

6

思路

  1. 解析输入

    • 第一行:获取 头节点地址节点数 n

    • 后续 n:建立 节点映射表 {地址 → {值, next}},同时 记录所有节点地址

  2. 重建链表

    • head 开始 遍历链表,找出 真正属于链表的节点顺序

  3. 寻找中间节点

    • 双指针法

      • 快指针 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博客

C语言题库: 2024 华为OD机试(C语言)真题【E卷+A卷+B卷+C卷+D卷】目录-CSDN博客

面试手撕题库: 2024华为OD面试手撕代码真题目录_华为od手撕代码-CSDN博客