动画图解“两数相加”,小学生都能看懂
复制struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
struct ListNode *dummyHead = (struct ListNode*)malloc(sizeof(struct ListNode));
dummyHead->val = 0;
dummyHead->next = NULL;
struct ListNode *node = dummyHead;
int carry = 0; // 进位
/* 遍历两个链表 */
for (struct ListNode* p = l1, *q = l2; p != NULL || q != NULL😉 {
/* 相同位置节点值之和 */
intsum = carry;
sum += (p != NULL) ? p->val : 0;
sum += (q != NULL) ? q->val : 0;
/* 将两链表相同位置的和的值,不断更新到新的链表 */
node->next = (struct ListNode*)malloc(sizeof(struct ListNode));
node = node->next;
node->val = sum % 10;
node->next = NULL;
/* 进位处理,两链表不断遍历 */
carry = sum / 10;
p = (p == NULL) ? p : p->next;
q = (q == NULL) ? q : q->next;
}
/* 最高位之和如果大于 10,增加一位,新链表的节点值为 1 */
if(carry != 0) {
node->next = (struct ListNode*)malloc(sizeof(struct ListNode));
node = node->next;
node->val = 1;
node->next = NULL;
}
return dummyHead->next;
}
1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.
THE END