LeetCode 2 两数相加(链表and迭代)

1.题目链接

https://leetcode-cn.com/problems/add-two-numbers/

2.题目描述

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

3.题目解析

3.1链表(Linked List)是由一连串的结构(称为结点)组成的,其中每个结点都包含指向下一个链中结点的指针(Pointer),如下图所示:

 

一般的,一个链表结点包含一个整数(即结点的数据)和指向表中下一个结点的指针。下面是结点的结构描述:

struct ListNode {
    int val;
    struct ListNode *next;
};

3.2 在本题目中,定义一个进位变量int c,在l1或l2不为空时依次迭代,每个结点的值value相加,相加值除以10,判断是否有进位,如下图所示:

4.代码实现

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
    int tmp = 0, c = 0;
    struct ListNode *HeadNode = NULL;
    struct ListNode *tempNode = NULL;
    tempNode = (struct ListNode *)malloc(sizeof(struct ListNode));
    HeadNode = tempNode;

    while (l1 || l2) {
        tempNode->next = (struct ListNode *)malloc(sizeof(struct ListNode));
        tempNode = tempNode->next;
        if (l1 == NULL)
            tmp 0 + l2->val + c;
        else if (l2 == NULL)
            tmp = l1->val + 0 + c;
        else
            tmp = l1->val + l2->val + c;
        
        tempNode->val = tmp % 10;
        tempNode->next = NULL;
        c = tmp / 10;

        if (l1 != NULL)
            l1 = l1->next;
        if (l2 != NULL)
            l2 = l2->next;
    }
    if (c) {
        tempNode->next = (struct ListNode *)malloc(sizeof(struct ListNode));
        tempNode = tempNode->next;
        tempNode->val = 1;
        tempNode->next = NULL;
        c 0;
    }
    return HeadNode->next;
}

5.提交记录

stay hungry, stay foolish
原文地址:https://www.cnblogs.com/zygote/p/13499673.html