赞
踩
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
struct ListNode *head = NULL, *tail = NULL;
int carry = 0;
while (l1 || l2) { //当l1或者l2有一个链表遍历到最后时,退出循环
int n1 = l1 ? l1->val : 0; //如果l1 !=0(为真),n1=l1->val; l1=0(为假),n1=0:
int n2 = l2 ? l2->val : 0;
int sum = n1 + n2 + carry;
if (!head) { //第一次执行的时候,head为空 !head为真 执行这段代码
head = tail = malloc(sizeof(struct ListNode)); //创建头结点
tail->val = sum % 10;
tail->next = NULL;
} else { //第二次之后执行这一段代码
tail->next = malloc(sizeof(struct ListNode));
tail->next->val = sum % 10; //取余得值
tail = tail->next;
tail->next = NULL;
}
carry = sum / 10; //取商得进位
if (l1) {
l1 = l1->next;
}
if (l2) {
l2 = l2->next;
}
}
if (carry > 0) { //例如 1 2 3 +4 5 7=5 7 0 1 所以最后一次进位需要单独用一个结点存储
tail->next = malloc(sizeof(struct ListNode));
tail->next->val = carry;
tail->next->next = NULL;
}
return head;
}
作者:LeetCode-Solution
链接:https://leetcode.cn/problems/add-two-numbers/solution/liang-shu-xiang-jia-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。