【前言】
今天是每日一题的第 2 天,坚持!!!
“热泪盈眶 亦是成长”
原题:两数相加
题目链接:两数相加
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例 1:![](https://img-blog.csdnimg.cn/6467d534d6d5469097df096f21d6e377.png)
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
示例 2:
输入:l1 = [0], l2 = [0]
输出:[0]
示例 3:
输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]
提示:
- 每个链表中的节点数在范围
[1, 100]
内 0 <= Node.val <= 9
- 题目数据保证列表表示的数字不含前导
代码
#define _CRT_SECURE_NO_WARNINGS 1 /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) { struct ListNode* head; struct ListNode* tail; int va1, va2; int temp; //进位标志 head = NULL; tail = NULL; va1 = va2 = temp = 0; while (l1 != NULL || l2 != NULL) { if (head == NULL) { head = (struct ListNode*)malloc(sizeof(struct ListNode)); head->val = 0; head->next = NULL; tail = head; } else { tail->next = (struct ListNode*)malloc(sizeof(struct ListNode)); tail = tail->next; } if (l1 == NULL) { va1 = 0; } else { va1 = l1->val; l1 = l1->next; } if (l2 == NULL) { va2 = 0; } else { va2 = l2->val; l2 = l2->next; } tail->val = (va1 + va2 + temp) % 10; temp = (va1 + va2 + temp) / 10; tail->next = NULL; } if (temp == 1) { //如果还有进位,最高位应该为1 tail->next = (struct ListNode*)malloc(sizeof(struct ListNode)); tail = tail->next; tail->val = 1; tail->next = NULL; } return head; }
今天是每日刷题第 2 天,记得每天都要敲一下嗷!
加油啦,小比特~