leecode 两数相加

发布时间:2024年01月12日

题目

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例 1: 输入: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 题目数据保证列表表示的数字不含前导零

我的代码

先写一个函数用于无视是否为空的从链表中取value

int getValue(struct ListNode* l1)
{
    if(l1 != NULL)
    {
        return l1->val;
    }
    return 0;
}

?写一个将当前节点分配空间并value相加,保存进位数,其中题目val∈[0,9],因此carry可以是硬编码1,但是这样不是很好。

void addNode(struct ListNode** sum, struct ListNode* l1, struct ListNode* l2, int carry)
{
    if(l1 == NULL && l2 == NULL && carry == 0)
    {
        return;
    }

    int sumVal = getValue(l1) + getValue(l2) + carry;
    int newCarry = sumVal / 10;
    sumVal %= 10;

    *sum = (struct ListNode *)malloc(sizeof(struct ListNode));
    (*sum)->val = sumVal;
    (*sum)->next = NULL;

    addNode(&((*sum)->next), l1 ? l1->next : NULL, l2 ? l2->next : NULL, newCarry);
}

最后调用自己的函数?

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
    struct ListNode *sumList = NULL;
    addNode(&sumList, l1, l2, 0);
    return sumList;
}

代码汇总?



int getValue(struct ListNode* l1)
{
    if(l1 != NULL)
    {
        return l1->val;
    }
    return 0;
}

void addNode(struct ListNode** sum, struct ListNode* l1, struct ListNode* l2, int carry)
{
    if(l1 == NULL && l2 == NULL && carry == 0)
    {
        return;
    }

    int sumVal = getValue(l1) + getValue(l2) + carry;
    int newCarry = sumVal / 10;
    sumVal %= 10;

    *sum = (struct ListNode *)malloc(sizeof(struct ListNode));
    (*sum)->val = sumVal;
    (*sum)->next = NULL;

    addNode(&((*sum)->next), l1 ? l1->next : NULL, l2 ? l2->next : NULL, newCarry);
}

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
    struct ListNode *sumList = NULL;
    addNode(&sumList, l1, l2, 0);
    return sumList;
}

运行结果

文章来源:https://blog.csdn.net/qq_35085273/article/details/135533631
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。