给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 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);
}
}
}