销售客户管理软件哪个好廊坊seo排名优化
0.声明
该题目来源于LeetCode
如有侵权,立马删除。
解法不唯一,如有新解法可一同讨论。
1.题目
0002两数相加
给你两个非空的链表,表示两个非负的整数,它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字0之外,这两个数都不会以0开头。
示例 1:
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807
示例 2:
输入:l1 = [0], l2 = [0]
输出:[0]
示例 3:
输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]
提示:
每个链表中的节点数在范围 [1, 100] 内
0 <= Node.val <= 9
题目数据保证列表表示的数字不含前导零
2.代码
namespace LeetCode_0002两数相加
{class Program{static void Main(string[] args){var l1 = generateList(new int[] { 1, 5, 7 });var l2 = generateList(new int[] { 9, 9, 2, 9 });printList(l1);printList(l2);LeetCode_AddTwoNum latn = new LeetCode_AddTwoNum();var sum = latn.AddTwoNumbers(l1, l2);printList(sum);var sum1 = latn.AddTwoNumbers_1(l1, l2);printList(sum1);Console.ReadKey();}static ListNode generateList(int[] vals){ListNode start = null;ListNode end = null;for (int i = 0; i < vals.Length; i++){if (start == null)//开头为null时{start = new ListNode(vals[i]);end = start;//移动指针}else{end.next = new ListNode(vals[i]);end = end.next;}}return start;}static void printList(ListNode l){while (l != null){Console.Write($"{l.val}, ");l = l.next;}Console.WriteLine("");}}class LeetCode_AddTwoNum{public ListNode AddTwoNumbers(ListNode l1, ListNode l2){//定义一个节点用来存储新链表的第一个节点ListNode firstNode = new ListNode(0);//定义一个循环的节点ListNode lastnode = firstNode;//进位int val = 0;while (l1 != null || l2 != null || val != 0){int num1, num2;if (l1 == null)num1 = 0;elsenum1 = l1.val;if (l2 == null)num2 = 0;elsenum2 = l2.val;int value = num1 + num2 + val;val = value / 10;value = value % 10;lastnode.next = new ListNode(value);lastnode = lastnode.next;if (l1 == null)l1 = null;elsel1 = l1.next;if (l2 == null)l2 = null;elsel2 = l2.next;}return firstNode.next;}public ListNode AddTwoNumbers_1(ListNode l1, ListNode l2){ListNode head = null, tail = null;int carry = 0;while (l1 != null || l2 != null){int n1 = l1 != null ? l1.val : 0;int n2 = l2 != null ? l2.val : 0;int sum = n1 + n2 + carry;if (head == null){head = tail = new ListNode(sum % 10);}else{tail.next = new ListNode(sum % 10);tail = tail.next;}carry = sum / 10;if (l1 != null){l1 = l1.next;}if (l2 != null){l2 = l2.next;}}if (carry > 0){tail.next = new ListNode(carry);}return head;}}class ListNode{public int val;public ListNode next;public ListNode(int val = 0, ListNode next = null){this.val = val;this.next = next;}}
}