C,给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
时间: 2023-08-22 19:14:36 浏览: 103
这道题可以用链表模拟加法的过程,从低位到高位一位位相加,如果有进位则要加到下一位。具体实现可以参考下面的代码:
```c
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
struct ListNode* head = NULL; // 结果链表的头指针
struct ListNode* tail = NULL; // 结果链表的尾指针
int carry = 0; // 进位
while (l1 != NULL || l2 != NULL || carry != 0) {
int sum = carry;
if (l1 != NULL) {
sum += l1->val;
l1 = l1->next;
}
if (l2 != NULL) {
sum += l2->val;
l2 = l2->next;
}
struct ListNode* node = (struct ListNode*)malloc(sizeof(struct ListNode));
node->val = sum % 10; // 取个位数
node->next = NULL;
carry = sum / 10; // 计算进位
if (head == NULL) {
head = node;
tail = node;
} else {
tail->next = node;
tail = node;
}
}
return head;
}
```
其中,`carry` 表示进位,每次循环时都将 `l1` 和 `l2` 的值加上 `carry`,然后计算个位数和进位,将个位数作为新节点的值,插入到结果链表中。最后返回结果链表的头指针即可。
阅读全文
相关推荐


















