两数相加

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers

以下是我的解答,我自己觉得我能想到的优化只有在赋值了。赋值应该在计算的时候就附加上。 反正自己想的想法不看其他人的答案这个是我的极限了应该。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public int val;
 *     public ListNode next;
 *     public ListNode(int x) { val = x; }
 * }
 */

public class Solution {
    List<int> list3 = new List<int>();

    public ListNode AddTwoNumbers(ListNode l1, ListNode l2) {
        this.GetValues(l1,l2,list3,0);
        var l3 = SetValues(list3,0);
        return l3;

    }

    private ListNode SetValues(List<int> array,int index){
        var listNode = new ListNode(array[index]);
        if(index<array.Count-1){
            listNode.next=SetValues(array,index+1);
        }
        return listNode;
    }

    private void GetValues(ListNode listNode1,ListNode listNode2,List<int> list,int secondNum){
        int num1 = 0;
        int num2 = 0;
            try{
                num1=listNode1.val;
            }catch{
            }
            try{
                num2=listNode2.val;
            }catch{
            }
        int num = num1 + num2 + secondNum;
        if(num > 9){
                    list.Add(num % 10);
                    secondNum = num / 10;
                }else{
                    list.Add(num);
                    secondNum = 0;
                }


        if(listNode1.next==null && listNode2.next==null){
            if(secondNum>0)
            {
                list.Add(secondNum);
            }
            return;

        }else{
            GetValues(listNode1.next==null?new ListNode(0):listNode1.next,listNode2.next==null?new ListNode(0):listNode2.next,list,secondNum);   
        }
    }   
}