2020-2-15
- Do not take anyone else’s word about what is right and wrong.
不要人云亦云。
题目:
给定两个用链表表示的整数,每个节点包含一个数位。
这些数位是反向存放的,也就是个位排在链表首部。
编写函数对这两个整数求和,并用链表形式返回结果。
示例:
输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295
输出:2 -> 1 -> 9,即912
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sum-lists-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
个人解答:(C版本)
- 就是对应为相加,然后将结果保存在动态生成的空间,注意的是进位问题。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
int carryFlag = 0;
int sum = 0;
int oneFlag = 1;
struct ListNode* l = NULL;
struct ListNode* q = NULL;
struct ListNode* p = NULL;
while((NULL != l1) || (NULL != l2))
{
// 给要计算结果储存分配空间
p = (struct ListNode*)malloc(sizeof(struct ListNode));
// 第一次进入
if(1 == oneFlag)
{
l = p;
q = p;
oneFlag = 0;
}
else
{
q->next = p;
q = q->next;
}
// 判断三种情况
if(NULL == l1)
{
sum = l2->val + carryFlag;
l2 = l2->next;
}
else if(NULL == l2)
{
sum = l1->val + carryFlag;
l1 = l1->next;
}
else
{
sum = l1->val + l2->val + carryFlag;
l1 = l1->next;
l2 = l2->next;
}
// 处理进位
if(sum >= 10)
{
carryFlag = 1;
sum -= 10;
}
else
{
carryFlag = 0;
}
q->val = sum;
}
// 如果最后一位还有进位,需要处理
if(1 == carryFlag)
{
q->next = (struct ListNode*)malloc(sizeof(struct ListNode));
q = q->next;
q->val = 1;
q->next = NULL;
}
else
{
q->next = NULL;
}
return l;
}
- 结果:
他山之石:
来源:CSDN
作者:GlYoung
链接:https://blog.csdn.net/m0_37697335/article/details/104320286