You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java双向链表操作结果存疑:执行指定代码后为何与预期不符?

双向链表操作推导及结果

初始链表结构

存储单词algorithm的双向链表共9个字符节点,加上头节点list(不存储字符),节点顺序及指针指向如下:
list → [a] ←→ [l(p1)] ←→ [g] ←→ [o] ←→ [r] ←→ [i(p2)] ←→ [t(p3)] ←→ [h] ←→ [m]

逐行代码执行分析

  1. p2.next.prev = p2.prev;
    p2指向[i]节点,p2.next是[t]节点,将[t]的prev指针改为指向[i]的prev节点[r],此时[r]与[t]建立前向关联,[i]暂时失去后向链接。

  2. p2.prev.next = p2.next;
    将[r]的next指针改为指向[t]节点,彻底将[i]从原链表中移除,此时链表变为:
    list → [a] ←→ [l] ←→ [g] ←→ [o] ←→ [r] ←→ [t] ←→ [h] ←→ [m],[i]成为游离节点。

  3. p2.next = p3.next;
    p3指向[t]节点,p3.next是[h]节点,将游离的[i]的next指针指向[h]。

  4. p3.next.prev = p2;
    将[h]的prev指针改为指向[i],建立[i]与[h]的双向链接。

  5. p3.next = p2;
    将[t]的next指针改为指向[i],此时[t] → [i] → [h]。

  6. p2.prev = p3;
    将[i]的prev指针改为指向[t],完成[t]与[i]的双向链接,链表更新为:
    list → [a] ←→ [l] ←→ [g] ←→ [o] ←→ [r] ←→ [t] ←→ [i] ←→ [h] ←→ [m]

  7. list.next.next = p1.next;
    list.next是[a]节点,p1指向[l]节点且p1.next是[g]节点,将[a]的next指针改为直接指向[g],跳过[l]节点。

  8. p1.next.prev = list.next;
    将[g]的prev指针改为指向[a],完成[a]与[g]的双向链接,彻底移除[l]节点,此时链表变为:
    list → [a] ←→ [g] ←→ [o] ←→ [r] ←→ [t] ←→ [i] ←→ [h] ←→ [m]

  9. p1 = null; 和 System.gc();
    仅将p1置空并触发垃圾回收,不改变有效链表结构。

最终结果

将节点字符按顺序拼接,得到字符串 agortihm。你的推导结果是正确的,大概率是测验系统判分错误,或者题目存在表述歧义。

内容的提问来源于stack exchange,提问作者Yoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 20:03:16