给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
链表如下:
public class ListNode
{
public int value;
public ListNode nextNode;
public ListNode(int val=0,ListNode next=null)
{
value=val;
nextNode=next;
}
}
解答:
public ListNode GetListNode(ListNode list_1,ListNode list_2,int nums=0)
{
if(list_1==null&&list_2==null) return nums==0?default:new ListNode(nums);
int value=(list_1?.value??0)+(list_2?.value??0)+nums;
ListNode list=new ListNode(value%10);
list.nextNode=GetListNode(list_1?.nextNode,list_2?.nextNode,value/10);
return list;
}
1.代码段:
int value=(list_1?.value??0)+(list_2?.value??0)+nums;
这段是将value都加起来以及nums(这个nums是上一个链表的进位1)
2.代码段:
ListNode list=new ListNode(value%10)
这个是实例下一个链表 ,下一个链表的vale等于 value%10也就是当value等于12时就是
ListNode list=new ListNode(value%10==2)
3.代码段:
list.nextNode=GetListNode(list_1?.nextNode,list_2?.nextNode,value/10);
这个是计算链表下一个也就是循环体
4.代码段:
if(list_1==null&&list_2==null) return nums==0?default:new ListNode(nums);
这个是当传入的链表都为空时,
递归停止。
这个时候的nums是进位符等于0时,就直接返回默认值,
如果不是0,就会返回一个新的new ListNode(nums)