库你急哇,哈集美马戏特~~

一顿操作猛如虎,一看击败百分五。。。。

老实人想先把两个链表转成整型加起来再转回去,结果被[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]教做人了

这里作者给出了3份代码,第一个为测试通过版,官方模拟了加法器;第2个为适用于数组长度较小时,逻辑简单,就是转换为整数进行运算;第3个为使用了itoa函数,使得转换更为简单,但是同样只适用长度较小。(测试样例太恶心了。。。。。。)

题目:

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 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
题目数据保证列表表示的数字不含前导零

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

上代码
第一份过OJ版

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>struct ListNode {int val;struct ListNode *next;
};struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){struct ListNode *head=NULL,*p1=NULL;int carry=0;while(l1||l2){int num1 = l1?l1->val:0;int num2 = l2?l2->val:0;int sum  =num1+num2+carry;if(!head){p1=head=(struct ListNode *)malloc(sizeof(struct ListNode));p1->val=sum%10;p1->next=NULL;}else{p1->next=(struct ListNode *)malloc(sizeof(struct ListNode));p1=p1->next;p1->val=sum%10;p1->next=NULL;}carry=sum/10;if(l1){l1=l1->next;}if(l2){l2=l2->next;}}if(carry>0){p1->next=(struct ListNode *)malloc(sizeof(struct ListNode));p1=p1->next;p1->val=carry;p1->next=NULL;}return head;}int main()
{struct ListNode *l1,*l2;struct ListNode *p1,*p2;int  n;p1=p2=(struct ListNode *)malloc(sizeof(struct ListNode));l1=p2;for(n=0;n<1;n++){p1->val=0;p2->next=p1;p2=p1;p1=(struct ListNode *)malloc(sizeof(struct ListNode));}p2->next=NULL;p1=p2=(struct ListNode *)malloc(sizeof(struct ListNode));l2=p2;for(n=0;n<1;n++){p1->val=0;p2->next=p1;p2=p1;p1=(struct ListNode*)malloc(sizeof(struct ListNode));}p2->next=NULL;struct ListNode *test=addTwoNumbers(l1,l2);while(test!=NULL){printf("%d",test->val);test=test->next;}return 0;
}

第二份

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>struct ListNode {int val;struct ListNode *next;
};struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){int num1=0,num2=0,sum=0;int n=0;struct ListNode *p1;p1=l1;while(p1!=NULL){num1=num1+p1->val*(int) (pow(10,n)+0.5);p1=p1->next;n++;}p1=l2;n=0;while(p1!=NULL){num2=num2+p1->val*(int)(pow(10,n)+0.5);p1=p1->next;n++;}sum=num1+num2;//判断底数是否为0,防止溢出if(sum==0){struct ListNode *err=(struct ListNode*)malloc(sizeof(struct ListNode));err->val=0;err->next=NULL;return err;}int len=floor(log10(sum))+1;int nums[10];for(n=len-1;n>=0;n--){nums[n]=sum/(int)(pow(10,n)+0.5);sum=sum-nums[n]*(int)(pow(10,n)+0.5);}struct ListNode *ret,*p2;p1=p2=(struct ListNode *)malloc(sizeof(struct ListNode));ret=p2;for(n=0;n<=len-1;n++){p1->val=nums[n];p2->next=p1;p2=p1;p1=(struct ListNode *)malloc(sizeof(struct ListNode));}p2->next=NULL;return ret;}int main()
{struct ListNode *l1,*l2;struct ListNode *p1,*p2;int  n;p1=p2=(struct ListNode *)malloc(sizeof(struct ListNode));l1=p2;for(n=0;n<3;n++){p1->val=0;p2->next=p1;p2=p1;p1=(struct ListNode *)malloc(sizeof(struct ListNode));}p2->next=NULL;p1=p2=(struct ListNode *)malloc(sizeof(struct ListNode));l2=p2;for(n=0;n<3;n++){p1->val=0;p2->next=p1;p2=p1;p1=(struct ListNode*)malloc(sizeof(struct ListNode));}p2->next=NULL;struct ListNode *test=addTwoNumbers(l1,l2);while(test!=NULL){printf("%d",test->val);test=test->next;}return 0;
}

第三份

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>struct ListNode {int val;struct ListNode *next;
};struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){int num1=0,num2=0,sum=0;int n=0;struct ListNode *p1;p1=l1;while(p1!=NULL){num1=num1+p1->val*(int) (pow(10,n)+0.5);p1=p1->next;n++;}p1=l2;n=0;while(p1!=NULL){num2=num2+p1->val*(int)(pow(10,n)+0.5);p1=p1->next;n++;}sum=num1+num2;char nums[10];itoa(sum,nums,10);int len=strlen(nums);struct ListNode *ret,*p2;p1=p2=(struct ListNode *)malloc(sizeof(struct ListNode));ret=p2;for(n=len-1;n>=0;n--){p1->val=(nums[n]-'0');p2->next=p1;p2=p1;p1=(struct ListNode *)malloc(sizeof(struct ListNode));}p2->next=NULL;return ret;}int main()
{struct ListNode *l1,*l2;struct ListNode *p1,*p2;int  n;p1=p2=(struct ListNode *)malloc(sizeof(struct ListNode));l1=p2;for(n=0;n<3;n++){p1->val=n;p2->next=p1;p2=p1;p1=(struct ListNode *)malloc(sizeof(struct ListNode));}p2->next=NULL;p1=p2=(struct ListNode *)malloc(sizeof(struct ListNode));l2=p2;for(n=0;n<3;n++){p1->val=n;p2->next=p1;p2=p1;p1=(struct ListNode*)malloc(sizeof(struct ListNode));}p2->next=NULL;struct ListNode *test=addTwoNumbers(l1,l2);while(test!=NULL){printf("%d",test->val);test=test->next;}return 0;
}

《LeetCode力扣练习》第2题 C语言版 (做出来就行,别问我效率。。。。)相关推荐

  1. 《LeetCode力扣练习》第96题 不同的二叉搜索树 Java

    <LeetCode力扣练习>第96题 不同的二叉搜索树 Java 一.资源 题目: 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回 ...

  2. 《LeetCode力扣练习》第75题 颜色分类 Java

    <LeetCode力扣练习>第75题 颜色分类 Java 一.资源 题目: 给定一个包含红色.白色和蓝色.共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按 ...

  3. 《LeetCode力扣练习》第64题 最小路径和 Java

    <LeetCode力扣练习>第64题 最小路径和 Java 一.资源 题目: 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为 ...

  4. 《LeetCode力扣练习》第62题 不同路径 Java

    <LeetCode力扣练习>第62题 不同路径 Java 一.资源 题目: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 "Start" ). ...

  5. 《LeetCode力扣练习》第56题 合并区间 Java

    <LeetCode力扣练习>第56题 合并区间 Java 一.资源 题目: 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, ...

  6. 《LeetCode力扣练习》第55题 跳跃游戏 Java

    <LeetCode力扣练习>第55题 跳跃游戏 Java 一.资源 题目: 给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 . 数组中的每个元素代表你在该位置可以跳跃的最大 ...

  7. 《LeetCode力扣练习》第617题 合并二叉树 Java

    <LeetCode力扣练习>第617题 合并二叉树 Java 一.资源 题目: 给你两棵二叉树: root1 和 root2 . 想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些 ...

  8. 《LeetCode力扣练习》第461题 汉明距离 Java

    <LeetCode力扣练习>第461题 汉明距离 Java 一.资源 题目: 两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目. 给你两个整数 x 和 y,计算并返回 ...

  9. 《LeetCode力扣练习》第448题 找到所有数组中消失的数字 Java

    <LeetCode力扣练习>第448题 找到所有数组中消失的数字 Java 一.资源 题目: 给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内.请你 ...

  10. 《LeetCode力扣练习》第338题 比特位计数 Java

    <LeetCode力扣练习>第338题 比特位计数 Java 一.资源 题目: 给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ...

最新文章

  1. anaconda更换镜像源
  2. 数学之美系列二 -- 谈谈中文分词
  3. mysql注入反弹_Discuz!x xss反弹后台无防御sql注入getshell(附带exploit)
  4. [导入]WCF后传系列(8):深度通道编程模型Part 1—设计篇
  5. android-tv
  6. Android-webview加载网页去除标题
  7. swap分区自动建立配置
  8. 记一次搜外吹牛皮回答之旅,如何提升关键词排名
  9. 微软官方原版win7(64位/32位)旗舰版系统下载【适合所有品牌】
  10. work信息每日汇总
  11. (转)来自一位作业辅导老师的经验分享
  12. 实时高分辨率视频抠像
  13. 正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起。
  14. pygame编写篮球游戏-火柴人运球避开防守跳起投篮
  15. ORA-01436 与 层次查询CONNECT BY
  16. 有史以来准备最充分的主网 - IOST Olympus v1.0正式上线
  17. 物联网展-2019北京国际物联网展览会-北京物联网展-北京物联网大会
  18. 异常处理——template中的image组件图片未显示
  19. 2012年10月3日
  20. 深富策略:股市崩盘的原因是什么

热门文章

  1. 定位城市_北方城市如何利用GPS定位器减轻铲雪工作压力?
  2. ubuntu下修改文件权限
  3. shell、javascript、python、tcl 等常用脚本语言
  4. python colormap(颜色映射)自定义
  5. 将声音转为图片(二维矩阵)
  6. 从源码分析DEARGUI之add_drawing
  7. 6 个理由,让我不顾一切撑腰 Python!
  8. Java NIO(十五) Path 的用法
  9. 【Ethereum】以太坊ERC20 Token标准完整说明
  10. Odoo之Field