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

C#实现两链表逐元素求和存入新链表的结果异常问题咨询

链表逐元素相加功能异常问题

需求说明

实现两个链表逐元素相加的功能,将计算结果存入全新的链表中。

功能示例

Input : list1 : 5->3->4
        list2 : 6->1->2
Output : list3 : 11->4->6

现有实现代码

internal class Program
{
    static void Main(string[] args)
    {
        ListNode l1 = new ListNode(1);
        l1.next = new ListNode(2);
        l1.next.next = new ListNode(3);

        ListNode l2 = new ListNode(1);
        l2.next = new ListNode(2);
        l2.next.next = new ListNode(3);

        ListNode l3 = new ListNode();
        

        while (l1 != null && l2 != null)
        {
            l3.val += l1.val + l2.val;
            l1 = l1.next;
            l2 = l2.next;
            l3.next = new ListNode();
        }
        
        while(l3 != null)
        {
            Console.WriteLine(l3.val + " ->");
            l3 = l3.next;   
        }
    }

    public class ListNode
    {
        public int val;
        public ListNode next;
        public ListNode(int val = 0, ListNode next = null)
        {
            this.val = val;
            this.next = next;
        }
    }
}

异常现象

代码运行后未达到逐元素求和的预期效果,上述测试用例的实际输出为list3 : 12->0。

异常产生原因

  • 核心逻辑错误:计算过程中没有移动结果链表的遍历指针。初始化后l3始终指向结果链表的头节点,三次循环的求和值(1+1=2、2+2=4、3+3=6)全部累加在头节点的val属性上,最终头节点值为12,和输出的第一个值完全匹配。
  • 节点创建逻辑错误:循环中每次都无条件创建新的l3.next节点,但从未将l3指针指向这个新节点,导致前两次循环创建的节点没有被任何引用持有,直接成为垃圾内存;循环结束后,头节点的next指向最后一次创建的、val取默认值0的空节点,这就是输出第二个值为0的来源。
  • 边界逻辑缺失:现有循环没有处理两个链表长度不一致的场景,只要其中一个链表遍历到末尾就会停止计算,会丢失长链表剩余节点的值;同时输出时直接移动了结果链表的头指针本身,没有提前保存头节点引用,会导致后续无法再从头遍历结果链表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:01:41