开发工具与关键技术: 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链表长度不一样的状况.