2.两数相加
题目描述
-
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
-
请你将两个数相加,并以相同形式返回一个表示和的链表。
-
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
-
提示:
每个链表中的节点数在范围 [1, 100] 内
0 <= Node.val <= 9
题目数据保证列表表示的数字不含前导零
题解:
struct ListNode *addTwoNumbers(struct ListNode *l1, struct ListNode *l2)
{
int c = 0; //存储进位值
struct ListNode *head, *cur, *next;
head = (struct ListNode *)malloc(sizeof(struct ListNode)); //创建一个新的链表头指针
head->next = NULL; //并将它的next置空
cur = head; //将head赋给cur,cur指针从head开始向后移动
while (l1 || l2 || c) //当两个链表其中有一个不为空时或有进位时
{
next = (struct ListNode *)malloc(sizeof(struct ListNode)); // 开辟空间
next->next = NULL;
cur->next = next; //将cur指针指向next
cur = next; //将cur指针从head移动到next
l1 != NULL ? (c += l1->val, l1 = l1->next) : (c += 0); // 当l1不为空时,c = c + l1->val,当l1为空时 l1 = l1->next
l2 != NULL ? (c += l2->val, l2 = l2->next) : (c += 0); // 当l2不为空时,c = c + l2->val,当l2为空时 l2 = l2->next
cur->val = c % 10; // 取进位值的个位数
c = c / 10; // 取进位值的十位数
}
return head -> next; // 直接返回head->next
}
参考题解来自于(https://blog.csdn.net/qq_39929929/article/details/102802508)
&spm=1001.2101.3001.5002&articleId=122160056&d=1&t=3&u=daa732f73f6e4a84afba256d6f74ae52)
4858

被折叠的 条评论
为什么被折叠?



