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]文章来源:https://www.toymoban.com/news/detail-480550.html
提示:
每个链表中的节点数在范围 [1, 100] 内
0 <= Node.val <= 9
题目数据保证列表表示的数字不含前导零文章来源地址https://www.toymoban.com/news/detail-480550.html
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;
else
num1 = l1.val;
if (l2 == null)
num2 = 0;
else
num2 = 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;
else
l1 = l1.next;
if (l2 == null)
l2 = null;
else
l2 = 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;
}
}
}
到了这里,关于LeetCode-C#-0002.两数相加的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!