LeetCode 445.两数相加||

[复制链接]
发表于 2026-2-25 17:10:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
1.标题要求:
  1. 给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。
  2. 你可以假设除了数字 0 之外,这两个数字都不会以零开头。
  3. 示例1:
  4. 输入:l1 = [7,2,4,3], l2 = [5,6,4]
  5. 输出:[7,8,0,7]
  6. 示例2:
  7. 输入:l1 = [2,4,3], l2 = [5,6,4]
  8. 输出:[8,0,7]
  9. 示例3:
  10. 输入:l1 = [0], l2 = [0]
  11. 输出:[0]
  12. 提示:
  13. 链表的长度范围为 [1, 100]
  14. 0 <= node.val <= 9
  15. 输入数据保证链表代表的数字无前导 0
复制代码
2.做题步调:
1.遍历两个链表,得到它们的节点数:
  1. struct ListNode* cur1 = l1;
  2.     struct ListNode* cur2 = l2;
  3.     int count_1 = 0;
  4.     int count_2 = 0;
  5.     while(cur1)
  6.     {
  7.         count_1++;
  8.         cur1 = cur1->next;
  9.     }
  10.     while(cur2)
  11.     {
  12.         count_2++;
  13.         cur2 = cur2->next;
  14.     }
复制代码
2.然后创造两个数组,把两个链表的值放入两个数组中:
  1. int* number1 = (int*)malloc(sizeof(int) * count_1);
  2.     int* number2 = (int*)malloc(sizeof(int) * count_2);
  3.     cur1 = l1;
  4.     cur2 = l2;
  5.     int i_1 = 0;
  6.     int i_2 = 0;
  7.     while(cur1)
  8.     {
  9.         number1[i_1] = cur1->val;
  10.         cur1 = cur1->next;
  11.         i_1++;
  12.     }
  13.     while(cur2){
  14.         number2[i_2] = cur2->val;
  15.         i_2++;
  16.         cur2 = cur2->next;
  17.     }
复制代码
3.然后再判断两个数组的长度的,把两个数组相加的值,放入长的数组:
  1. if(count_1 > count_2)
  2.     {
  3.         int i = 0;
  4.         for(i = 0;i < count_1;i++)
  5.         {
  6.             if(count_1 - i == count_2)
  7.             {
  8.                 break;
  9.             }
  10.         }
  11.         int j = 0;
  12.         for(j = 0;j < count_2;j++)
  13.         {
  14.             number1[i] += number2[j];
  15.             i++;
  16.         }
  17.         i = count_1 - 1;
  18.         for(i = count_1 - 1;i > 0;i--){
  19.             if(number1[i] > 9)
  20.             {
  21.                 number1[i - 1] += 1;
  22.                 number1[i] %= 10;
  23.             }
  24.         }
  25.         if(number1[0] > 9)
  26.         {
  27.             struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode));
  28.             head->next = l1;
  29.             l1 = head;
  30.             cur1 = l1;
  31.             cur1->val = number1[0] / 10;
  32.             cur1 = cur1->next;
  33.             cur1->val = number1[0] % 10;
  34.             cur1 = cur1->next;
  35.             for(i = 1;i < count_1;i++)
  36.             {
  37.                 cur1->val = number1[i];
  38.                 cur1 = cur1->next;
  39.             }
  40.             return l1;
  41.         }else{
  42.             cur1 = l1;
  43.             for(i = 0;i < count_1;i++)
  44.             {
  45.                 cur1->val = number1[i];
  46.                 cur1 = cur1->next;
  47.             }
  48.             return l1;
  49.         }
  50.     }else{
  51.         int i = 0;
  52.         for(i = 0;i < count_2;i++)
  53.         {
  54.             if(count_2 - i == count_1)
  55.             {
  56.                 break;
  57.             }
  58.         }
  59.         int j = 0;
  60.         for(j = 0;j < count_1;j++)
  61.         {
  62.             number2[i] += number1[j];
  63.             i++;
  64.         }
  65.         i = count_2 - 1;
  66.         for(i = count_2 - 1;i > 0;i--)
  67.         {
  68.             if(number2[i] > 9)
  69.             {
  70.                 number2[i - 1] += 1;
  71.                 number2[i] %= 10;
  72.             }
  73.         }
  74.         if(number2[0] > 9)
  75.         {
  76.             struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode));
  77.             head->next = l2;
  78.             l2 = head;
  79.             cur2 = l2;
  80.             cur2->val = number2[0] / 10;
  81.             cur2 = cur2->next;
  82.             cur2->val = number2[0] % 10;
  83.             cur2 = cur2->next;
  84.             for(i = 1;i < count_2;i++)
  85.             {
  86.                 cur2->val = number2[i];
  87.                 cur2 = cur2->next;
  88.             }
  89.             return l2;
  90.         }else{
  91.             cur2 = l2;
  92.             for(i = 0;i < count_2;i++)
  93.             {
  94.                 cur2->val = number2[i];
  95.                 cur2 = cur2->next;
  96.             }
  97.             return l2;
  98.         }
  99.     }
复制代码
全部代码:
  1. /** * 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;
  2.     struct ListNode* cur2 = l2;
  3.     int count_1 = 0;
  4.     int count_2 = 0;
  5.     while(cur1)
  6.     {
  7.         count_1++;
  8.         cur1 = cur1->next;
  9.     }
  10.     while(cur2)
  11.     {
  12.         count_2++;
  13.         cur2 = cur2->next;
  14.     }
  15.     int* number1 = (int*)malloc(sizeof(int) * count_1);
  16.     int* number2 = (int*)malloc(sizeof(int) * count_2);
  17.     cur1 = l1;
  18.     cur2 = l2;
  19.     int i_1 = 0;
  20.     int i_2 = 0;
  21.     while(cur1)
  22.     {
  23.         number1[i_1] = cur1->val;
  24.         cur1 = cur1->next;
  25.         i_1++;
  26.     }
  27.     while(cur2){
  28.         number2[i_2] = cur2->val;
  29.         i_2++;
  30.         cur2 = cur2->next;
  31.     }
  32.     if(count_1 > count_2)
  33.     {
  34.         int i = 0;
  35.         for(i = 0;i < count_1;i++)
  36.         {
  37.             if(count_1 - i == count_2)
  38.             {
  39.                 break;
  40.             }
  41.         }
  42.         int j = 0;
  43.         for(j = 0;j < count_2;j++)
  44.         {
  45.             number1[i] += number2[j];
  46.             i++;
  47.         }
  48.         i = count_1 - 1;
  49.         for(i = count_1 - 1;i > 0;i--){
  50.             if(number1[i] > 9)
  51.             {
  52.                 number1[i - 1] += 1;
  53.                 number1[i] %= 10;
  54.             }
  55.         }
  56.         if(number1[0] > 9)
  57.         {
  58.             struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode));
  59.             head->next = l1;
  60.             l1 = head;
  61.             cur1 = l1;
  62.             cur1->val = number1[0] / 10;
  63.             cur1 = cur1->next;
  64.             cur1->val = number1[0] % 10;
  65.             cur1 = cur1->next;
  66.             for(i = 1;i < count_1;i++)
  67.             {
  68.                 cur1->val = number1[i];
  69.                 cur1 = cur1->next;
  70.             }
  71.             return l1;
  72.         }else{
  73.             cur1 = l1;
  74.             for(i = 0;i < count_1;i++)
  75.             {
  76.                 cur1->val = number1[i];
  77.                 cur1 = cur1->next;
  78.             }
  79.             return l1;
  80.         }
  81.     }else{
  82.         int i = 0;
  83.         for(i = 0;i < count_2;i++)
  84.         {
  85.             if(count_2 - i == count_1)
  86.             {
  87.                 break;
  88.             }
  89.         }
  90.         int j = 0;
  91.         for(j = 0;j < count_1;j++)
  92.         {
  93.             number2[i] += number1[j];
  94.             i++;
  95.         }
  96.         i = count_2 - 1;
  97.         for(i = count_2 - 1;i > 0;i--)
  98.         {
  99.             if(number2[i] > 9)
  100.             {
  101.                 number2[i - 1] += 1;
  102.                 number2[i] %= 10;
  103.             }
  104.         }
  105.         if(number2[0] > 9)
  106.         {
  107.             struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode));
  108.             head->next = l2;
  109.             l2 = head;
  110.             cur2 = l2;
  111.             cur2->val = number2[0] / 10;
  112.             cur2 = cur2->next;
  113.             cur2->val = number2[0] % 10;
  114.             cur2 = cur2->next;
  115.             for(i = 1;i < count_2;i++)
  116.             {
  117.                 cur2->val = number2[i];
  118.                 cur2 = cur2->next;
  119.             }
  120.             return l2;
  121.         }else{
  122.             cur2 = l2;
  123.             for(i = 0;i < count_2;i++)
  124.             {
  125.                 cur2->val = number2[i];
  126.                 cur2 = cur2->next;
  127.             }
  128.             return l2;
  129.         }
  130.     }
  131. }
复制代码
好了,这就是我的代码,各人如果以为好的话,就给个免费的赞吧,谢谢各位大佬们了 ^ _ ^ .
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表