您将获得两个非空链表,表示两个非负整数。 数字以相反的顺序存储,每个节点包含一个数字。 添加两个数字并将其作为链接列表返回。
您可以假设这两个数字不包含任何前导零,除了数字0本身。
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
解释:342+465=807
----------------------------------------
这是一道笔试题,要求写的是伪代码,为了加深印象,就将其完整代码写了出来
自定义链表参考上一篇文章 -- C#自定义单链表
//测试主方法,想创建两个链表,往里面添加数据(一个数字)
static void Main(string[] args)
{
LinkList<int> l1 = new LinkList<int>();
l1.Add(2);
l1.Add(4);
l1.Add(3);
LinkList<int> l2 = new LinkList<int>();
l2.Add(5);
l2.Add(6);
l2.Add(4);
AddTwoNumbers(l1, l2);
Console.ReadKey();
}
static void AddTwoNumbers(LinkList<int> l1, LinkList<int> l2) {
int sum = 0;
//创建两个节点,用来遍历两个链表(节点类和链表类参考上一篇文章)
Node<int> node1 = l1.head;
Node<int> node2 = l2.head;
LinkList<int> l3 = new LinkList<int>();
//每次循环,sum先和l1的数据相加,再和l2中的数据相加,然后将sum存放到l3链表中,因为相加的和可能大于10
//所以每次添加到l3中要做求余运算,两数相加会产生进位,所以sum /= 10; 再进入下一次遍历
//如果l1的数据没有遍历完,或者l2中的数据没有遍历完,或者sum!=0 (此时会产生进位),循环需要继续,l3要添加数据
while (node1 != null || node2 != null || sum != 0) {
if (node1 != null) {
sum += node1.data;
node1 = node1.next;
}
if (node2 != null) {
sum += node2.data;
node2 = node2.next;
}
l3.Add(sum%10);
sum /= 10;
}
l3.ShowAll();
//以下两种方法都可以将链表反转,方法体参见上一篇文章
//l3.ReverseList(l3.head);
l3.ReverseList();
}