开发工具与关键技术: C#
作者:奶糖不甜
撰写时间:2022.3.7
C#是微软公司发布的一种由C和C++衍生出来的面向对象的编程语言、运行于.NET Framework和.NET Core之上的高级程序设计语言.并定于在微软职业开发者论坛(PDC)上登台亮相。C#是微软公司研究员Anders Hejlsberg的最新成果.C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程.但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM是直接集成的,而且它是微软公司 .NET windows网络框架的主角.
题目描述:
给你两个非空的链表,表示两个非负的整数.它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储 一位数字.请你将两个数相加,并以相同形式返回一个表示和的链表.
你可以假设除了数字 0 之外,这两个数都不会以 0 开头,每个链表中的节点数都在范围[1, 100]之内.
示例:
输入l1 = [2, 4, 3], l2 = [5, 6, 4].结果输出为[7, 0, 8].
解释:342 + 465 = 807.
最清晰解法:
链表的计算方法,首先想到的就是进位,设置进位值.由于题目表明链表是逆序相加,所以第一位也就是个位数先进行计算,更加方便确定是否有进位值。
设置进位值num,将每次l1, l2, num三个值加起来为mid,位数为mid%10,大于10则进位为mid/10,实例如下:
public class Solution {
public ListNode AddTwoNumbers(ListNode l1, ListNode l2, int num = 0)
{
if(l1 == null && l2 == null)
{
if(num != 0) return new ListNode(num);
else return null;
}
int mid = (l1?.val ?? 0) + (l2?.val ?? 0) + num;
ListNode listnode = new ListNode(mid % 10);
listnode.next = AddTwoNumbers(l1?.next, l2?.next, mid/10);
return listnode;
}
}
注:讲解一下问号的用法.
? 可空类型修饰符,使值类型也可为空.
a??b 空合并运算符,当a为null时则返回b,a不为null时则返回a本身.
?. null检查运算符,如果对象为NULL,则不进行后面的获取成员的运算,直接返回null.
在这里判断l1,l2是否为空,用于解决l1、l2链表长度不一样的情况.