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

C#创建单向链表时元素插入异常、首元素丢失问题求解

代码逻辑缺陷说明

原代码存在3个核心逻辑错误:

  • 指针从未向后移动:整个循环过程中始终在操作初始创建的finalNode对象,没有将引用切换到后续新创建的节点上。每次循环都会直接覆盖finalNode的val值,同时把之前挂载的next节点替换为全新的空节点,前序循环存储的所有数值都会被直接丢弃。
  • 多余空节点创建:每轮循环都会无条件新建一个val为默认值0的空ListNode作为next,哪怕已经处理完字符串最后一位,也会多生成一个无意义的尾节点,这就是最终结果末尾出现0的直接原因。
  • 头节点未做留存:因为全程原地修改初始节点的属性,循环结束后初始节点只保留了最后一次赋值的数值(字符串最后一位'6'),next指向最后一次创建的空节点,因此最终只会输出6→0的错误结构,前5位数字全部被覆盖丢失。
修正代码

如果需要按字符串原顺序构建链表(即"123456"对应1→2→3→4→5→6的结构),可以参考如下实现:

// requiredDigit 取值为字符串"123456"
// 初始化头节点存储第一位数值
ListNode head = new ListNode(requiredDigit[0] - '0');
// 定义可移动的当前指针,初始指向头节点
ListNode current = head;

// 从第二位开始遍历字符串
for(int i = 1; i < requiredDigit.Length; i++){
    // 创建新节点存储当前位数值,挂载到当前节点的next位置
    current.next = new ListNode(requiredDigit[i] - '0');
    // 将当前指针后移到新创建的节点,准备下一轮追加
    current = current.next;
}

// 遍历head节点即可得到完整顺序链表:1→2→3→4→5→6

如果业务场景需要逆序存储链表(比如字符串高位在链表尾、低位在链表头,常见于两数相加类算法题),只需要调整为头插法逻辑即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:36:21