题目描述
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
测试用例
输入: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]
代码详解
代码展示(与单链表有关的插入、删除、打印操作在前短时间的博客中已经显示,大家可以查看,我这里直接使用了)
LNode* Add(LinkList pA, LinkList pB)
{
if (pA == NULL || pB == NULL || pA->next == NULL || pB->next == NULL)
{
printf("Data Error\n");
return NULL;
}
LNode pc;
InitList(&pc);
int result = 0, consult = 0, remainder = 0;//remainder==余数,consult == 商==进位数
LinkList pa =pA->next;
LinkList pb =pB->next;
while (pa || pb)
{
if (pa && pb)
{
result = pa->data + pb->data + consult;
pa = pa->next, pb = pb->next;
}
else if (pa)
{
result = pa->data + consult;
pa = pa->next;
}
else
{
result = pb->data + consult;
pb = pb->next;
}
if (result != 10)
{
consult = result / 10;
remainder = result % 10;
Insert_Tail(&pc, remainder);
}
else
{
consult = 1;
remainder = 0;
Insert_Tail(&pc, 0);
}
}
if (consult != 0)
{
Insert_Tail(&pc, consult);
}
return &pc;
}