LeetCode 445.两数相加||

1.题目要求:

给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。

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

 

示例1:



输入:l1 = [7,2,4,3], l2 = [5,6,4]
输出:[7,8,0,7]
示例2:

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[8,0,7]
示例3:

输入:l1 = [0], l2 = [0]
输出:[0]
 

提示:

链表的长度范围为 [1, 100]
0 <= node.val <= 9
输入数据保证链表代表的数字无前导 0

2.做题步骤:
1.遍历两个链表,得到它们的节点数:

 struct ListNode* cur1 = l1;
    struct ListNode* cur2 = l2;
    int count_1 = 0;
    int count_2 = 0;
    while(cur1)
    {
        count_1++;
        cur1 = cur1->next;
    }
    while(cur2)
    {
        count_2++;
        cur2 = cur2->next;
    }

2.然后创造两个数组,把两个链表的值放入两个数组中:

int* number1 = (int*)malloc(sizeof(int) * count_1);
    int* number2 = (int*)malloc(sizeof(int) * count_2);
    cur1 = l1;
    cur2 = l2;
    int i_1 = 0;
    int i_2 = 0;
    while(cur1)
    {
        number1[i_1] = cur1->val;
        cur1 = cur1->next;
        i_1++;
    }
    while(cur2){
        number2[i_2] = cur2->val;
        i_2++;
        cur2 = cur2->next;
    }

3.然后再判断两个数组的长度的,把两个数组相加的值,放入长的数组:

if(count_1 > count_2)
    {
        int i = 0;
        for(i = 0;i < count_1;i++)
        {
            if(count_1 - i == count_2)
            {
                break;
            }
        }
        int j = 0;
        for(j = 0;j < count_2;j++)
        {
            number1[i] += number2[j];
            i++;
        }
        i = count_1 - 1;
        for(i = count_1 - 1;i > 0;i--){
            if(number1[i] > 9)
            {
                number1[i - 1] += 1;
                number1[i] %= 10;
            }
        }
        if(number1[0] > 9)
        {
            struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode));
            head->next = l1;
            l1 = head;
            cur1 = l1;
            cur1->val = number1[0] / 10;
            cur1 = cur1->next;
            cur1->val = number1[0] % 10;
            cur1 = cur1->next;
            for(i = 1;i < count_1;i++)
            {
                cur1->val = number1[i];
                cur1 = cur1->next;
            }
            return l1;
        }else{
            cur1 = l1;
            for(i = 0;i < count_1;i++)
            {
                cur1->val = number1[i];
                cur1 = cur1->next;
            }
            return l1;
        }
    }else{
        int i = 0;
        for(i = 0;i < count_2;i++)
        {
            if(count_2 - i == count_1)
            {
                break;
            }
        }
        int j = 0;
        for(j = 0;j < count_1;j++)
        {
            number2[i] += number1[j];
            i++;
        }
        i = count_2 - 1;
        for(i = count_2 - 1;i > 0;i--)
        {
            if(number2[i] > 9)
            {
                number2[i - 1] += 1;
                number2[i] %= 10;
            }
        }
        if(number2[0] > 9)
        {
            struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode));
            head->next = l2;
            l2 = head;
            cur2 = l2;
            cur2->val = number2[0] / 10;
            cur2 = cur2->next;
            cur2->val = number2[0] % 10;
            cur2 = cur2->next;
            for(i = 1;i < count_2;i++)
            {
                cur2->val = number2[i];
                cur2 = cur2->next;
            }
            return l2;
        }else{
            cur2 = l2;
            for(i = 0;i < count_2;i++)
            {
                cur2->val = number2[i];
                cur2 = cur2->next;
            }
            return l2;
        }
    }

全部代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
    struct ListNode* cur1 = l1;
    struct ListNode* cur2 = l2;
    int count_1 = 0;
    int count_2 = 0;
    while(cur1)
    {
        count_1++;
        cur1 = cur1->next;
    }
    while(cur2)
    {
        count_2++;
        cur2 = cur2->next;
    }
    int* number1 = (int*)malloc(sizeof(int) * count_1);
    int* number2 = (int*)malloc(sizeof(int) * count_2);
    cur1 = l1;
    cur2 = l2;
    int i_1 = 0;
    int i_2 = 0;
    while(cur1)
    {
        number1[i_1] = cur1->val;
        cur1 = cur1->next;
        i_1++;
    }
    while(cur2){
        number2[i_2] = cur2->val;
        i_2++;
        cur2 = cur2->next;
    }
    if(count_1 > count_2)
    {
        int i = 0;
        for(i = 0;i < count_1;i++)
        {
            if(count_1 - i == count_2)
            {
                break;
            }
        }
        int j = 0;
        for(j = 0;j < count_2;j++)
        {
            number1[i] += number2[j];
            i++;
        }
        i = count_1 - 1;
        for(i = count_1 - 1;i > 0;i--){
            if(number1[i] > 9)
            {
                number1[i - 1] += 1;
                number1[i] %= 10;
            }
        }
        if(number1[0] > 9)
        {
            struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode));
            head->next = l1;
            l1 = head;
            cur1 = l1;
            cur1->val = number1[0] / 10;
            cur1 = cur1->next;
            cur1->val = number1[0] % 10;
            cur1 = cur1->next;
            for(i = 1;i < count_1;i++)
            {
                cur1->val = number1[i];
                cur1 = cur1->next;
            }
            return l1;
        }else{
            cur1 = l1;
            for(i = 0;i < count_1;i++)
            {
                cur1->val = number1[i];
                cur1 = cur1->next;
            }
            return l1;
        }
    }else{
        int i = 0;
        for(i = 0;i < count_2;i++)
        {
            if(count_2 - i == count_1)
            {
                break;
            }
        }
        int j = 0;
        for(j = 0;j < count_1;j++)
        {
            number2[i] += number1[j];
            i++;
        }
        i = count_2 - 1;
        for(i = count_2 - 1;i > 0;i--)
        {
            if(number2[i] > 9)
            {
                number2[i - 1] += 1;
                number2[i] %= 10;
            }
        }
        if(number2[0] > 9)
        {
            struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode));
            head->next = l2;
            l2 = head;
            cur2 = l2;
            cur2->val = number2[0] / 10;
            cur2 = cur2->next;
            cur2->val = number2[0] % 10;
            cur2 = cur2->next;
            for(i = 1;i < count_2;i++)
            {
                cur2->val = number2[i];
                cur2 = cur2->next;
            }
            return l2;
        }else{
            cur2 = l2;
            for(i = 0;i < count_2;i++)
            {
                cur2->val = number2[i];
                cur2 = cur2->next;
            }
            return l2;
        }
    }
}

好了,这就是我的代码,大家如果觉得好的话,就给个免费的赞吧,谢谢各位大佬们了 ^ _ ^ .

相关推荐

  1. LeetCode 445.相加||

    2024-07-15 17:36:03       17 阅读
  2. LeetCode454相加

    2024-07-15 17:36:03       38 阅读
  3. leetcode-2.相加

    2024-07-15 17:36:03       56 阅读
  4. leetcode 2. 相加

    2024-07-15 17:36:03       45 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 17:36:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 17:36:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 17:36:03       58 阅读
  4. Python语言-面向对象

    2024-07-15 17:36:03       69 阅读

热门阅读

  1. openstack

    2024-07-15 17:36:03       20 阅读
  2. Memcached与Redis:缓存解决方案的较量与选择

    2024-07-15 17:36:03       21 阅读
  3. pandas读取超过16位的excle

    2024-07-15 17:36:03       17 阅读
  4. blinker库

    2024-07-15 17:36:03       20 阅读
  5. 如何使用断点续传方式上传大文件到阿里云 OSS

    2024-07-15 17:36:03       15 阅读
  6. Web打点技术的攻击手段和渗透测试工具

    2024-07-15 17:36:03       21 阅读
  7. 游戏开发面试题2

    2024-07-15 17:36:03       19 阅读
  8. linux系统调用

    2024-07-15 17:36:03       22 阅读
  9. git安装

    git安装

    2024-07-15 17:36:03      20 阅读
  10. 2# 监控都不管用

    2024-07-15 17:36:03       17 阅读
  11. 线程同步的使用(二)

    2024-07-15 17:36:03       17 阅读
  12. 了解动力转向油封

    2024-07-15 17:36:03       17 阅读
  13. Solon v2.8.5 发布

    2024-07-15 17:36:03       18 阅读
  14. Python中的 NumPy与Pandas库介绍

    2024-07-15 17:36:03       16 阅读