题目:
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
来源:力扣(LeetCode)
链接:2. 两数相加 - 力扣(LeetCode) (leetcode-cn.com)
示例:
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
这是一个比较简单的题目,但是要注意进位。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
struct ListNode *l3 = NULL,*q3 = NULL;
int c = 0;
int a,b;
while(l1 || l2)
{
a = l1? l1->val:0;
b= l2? l2->val:0;
if(!l3)
{
l3 = q3 = malloc(sizeof(struct ListNode));
q3->val = a + b + c;
if(q3->val >9)
{
q3->val -=10;
c = 1;
}
else c=0;
q3->next = NULL;
}
else
{
q3->next = malloc(sizeof(struct ListNode));
q3->next->val = c + a + b;
if(q3->next->val > 9)
{
q3->next->val -= 10;
c = 1;
}
else c= 0;
q3 = q3->next;
q3->next = NULL;
}
if(l1)
{
l1 = l1->next;
}
if(l2) l2 = l2->next;
}
if(c)
{
q3->next = malloc(sizeof(struct ListNode));
q3->next->val = 1;
q3->next->next = NULL;
}
return l3;
}