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
相关产品推荐
相关产品推荐

