题目描述
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
注意
- 输出链表
struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode* size = head;
size->next = (struct ListNode*)malloc(sizeof(struct ListNode));
size = size->next;
size->next = NULL;
size = head;
head = head->next;
return head;
错误解法
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
long long count1 = 1;
long long sum1 = 0;
while (l1 != NULL) {
sum1 += l1->val * count1;
count1 = count1 * 10;
l1 = l1->next;
}
long long count2 = 1;
long long sum2 = 0;
while (l2 != NULL) {
sum2 += l2->val * count2;
count2 = count2 * 10;
l2 = l2->next;
}
long long sum = sum1 + sum2;
struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode* size = head;
if (sum == 0) {
size->next = (struct ListNode*)malloc(sizeof(struct ListNode));
size = size->next;
size->val = 0;
}
while (sum) {
size->next = (struct ListNode*)malloc(sizeof(struct ListNode));
size = size->next;
size->val = sum % 10;
sum = sum / 10;
}
size->next = NULL;
size = head;
head = head->next;
return head;
}
直接计算sum,结果可能会溢出。
代码
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode* size = head;
int count = 0;
while (l1 != NULL && l2 != NULL) {
size->next = (struct ListNode*)malloc(sizeof(struct ListNode));
size = size->next;
if (l1->val + l2->val + count < 10) {
size->val = l1->val + l2->val + count;
count = 0;
l1 = l1->next;
l2 = l2->next;
} else {
size->val = (l1->val + l2->val + count) % 10;
count = 1;
l1 = l1->next;
l2 = l2->next;
}
}
while (l1 != NULL) {
size->next = (struct ListNode*)malloc(sizeof(struct ListNode));
size = size->next;
if (l1->val + count == 10) {
size->val = 0;
count = 1;
} else {
size->val = l1->val + count;
count = 0;
}
l1 = l1->next;
}
while (l2 != NULL) {
size->next = (struct ListNode*)malloc(sizeof(struct ListNode));
size = size->next;
if (l2->val + count == 10) {
size->val = 0;
count = 1;
} else {
size->val = l2->val + count;
count = 0;
}
l2 = l2->next;
}
if (count == 1) {
size->next = (struct ListNode*)malloc(sizeof(struct ListNode));
size = size->next;
size->val = 1;
}
size->next = NULL;
size = head;
head = head->next;
return head;
}
逐位数字相加,count用于判断是否进位。