《LeetCode力扣练习》第2题 C语言版 (做出来就行,别问我效率。。。。)
库你急哇,哈集美马戏特~~
一顿操作猛如虎,一看击败百分五。。。。
老实人想先把两个链表转成整型加起来再转回去,结果被[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语言版 (做出来就行,别问我效率。。。。)相关推荐
- 《LeetCode力扣练习》第96题 不同的二叉搜索树 Java
<LeetCode力扣练习>第96题 不同的二叉搜索树 Java 一.资源 题目: 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回 ...
- 《LeetCode力扣练习》第75题 颜色分类 Java
<LeetCode力扣练习>第75题 颜色分类 Java 一.资源 题目: 给定一个包含红色.白色和蓝色.共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按 ...
- 《LeetCode力扣练习》第64题 最小路径和 Java
<LeetCode力扣练习>第64题 最小路径和 Java 一.资源 题目: 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为 ...
- 《LeetCode力扣练习》第62题 不同路径 Java
<LeetCode力扣练习>第62题 不同路径 Java 一.资源 题目: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 "Start" ). ...
- 《LeetCode力扣练习》第56题 合并区间 Java
<LeetCode力扣练习>第56题 合并区间 Java 一.资源 题目: 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, ...
- 《LeetCode力扣练习》第55题 跳跃游戏 Java
<LeetCode力扣练习>第55题 跳跃游戏 Java 一.资源 题目: 给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 . 数组中的每个元素代表你在该位置可以跳跃的最大 ...
- 《LeetCode力扣练习》第617题 合并二叉树 Java
<LeetCode力扣练习>第617题 合并二叉树 Java 一.资源 题目: 给你两棵二叉树: root1 和 root2 . 想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些 ...
- 《LeetCode力扣练习》第461题 汉明距离 Java
<LeetCode力扣练习>第461题 汉明距离 Java 一.资源 题目: 两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目. 给你两个整数 x 和 y,计算并返回 ...
- 《LeetCode力扣练习》第448题 找到所有数组中消失的数字 Java
<LeetCode力扣练习>第448题 找到所有数组中消失的数字 Java 一.资源 题目: 给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内.请你 ...
- 《LeetCode力扣练习》第338题 比特位计数 Java
<LeetCode力扣练习>第338题 比特位计数 Java 一.资源 题目: 给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ...
最新文章
- anaconda更换镜像源
- 数学之美系列二 -- 谈谈中文分词
- mysql注入反弹_Discuz!x xss反弹后台无防御sql注入getshell(附带exploit)
- [导入]WCF后传系列(8):深度通道编程模型Part 1—设计篇
- android-tv
- Android-webview加载网页去除标题
- swap分区自动建立配置
- 记一次搜外吹牛皮回答之旅,如何提升关键词排名
- 微软官方原版win7(64位/32位)旗舰版系统下载【适合所有品牌】
- work信息每日汇总
- (转)来自一位作业辅导老师的经验分享
- 实时高分辨率视频抠像
- 正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起。
- pygame编写篮球游戏-火柴人运球避开防守跳起投篮
- ORA-01436 与 层次查询CONNECT BY
- 有史以来准备最充分的主网 - IOST Olympus v1.0正式上线
- 物联网展-2019北京国际物联网展览会-北京物联网展-北京物联网大会
- 异常处理——template中的image组件图片未显示
- 2012年10月3日
- 深富策略:股市崩盘的原因是什么