题目描述

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

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

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

示例

输入:( ->  -> ) + ( ->  -> )
输出: -> ->
原因: + =

题目要求

 /**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/ struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
}

题解

 /**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/ struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
int temp=;
struct ListNode *p1=l1;
struct ListNode *p2=l2;
struct ListNode *p3 = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode *l3=p3;
for(int i=;;i++){
if(p1==NULL&&p2==NULL){//两数结束
if(temp==){//判断进位
struct ListNode *p4 = (struct ListNode*)malloc(sizeof(struct ListNode));
p4->val=;
p4->next=NULL;
p3->next=p4;
p3=p4;
}
break;
}
else if(p1==NULL){//数一结束
while(p2!=NULL){
struct ListNode *p4= (struct ListNode*)malloc(sizeof(struct ListNode));
int sum=p2->val+temp;
temp=sum/;
sum%=;
p4->val=sum;
p4->next=NULL;
p3->next=p4;
p3=p4;
p2=p2->next;
if(p2==NULL)break;
}
if(temp!=){//数二也结束后判断进位
struct ListNode *p4= (struct ListNode*)malloc(sizeof(struct ListNode));
p4->val=;
p4->next=NULL;
p3->next=p4;
}
break;
}
else if(p2==NULL){
while(){
struct ListNode *p4= (struct ListNode*)malloc(sizeof(struct ListNode));
int sum=p1->val+temp;
temp=sum/;
sum%=;
p4->val=sum;
p4->next=NULL;
p3->next=p4;
p3=p4;
p1=p1->next;
if(p1==NULL)break;
}
if(temp!=){
struct ListNode *p4= (struct ListNode*)malloc(sizeof(struct ListNode));
p4->val=;
p4->next=NULL;
p3->next=p4;
}
break;
}
       //两数都未结束,正常相加
int sum=p1->val+p2->val+temp;
temp=sum/;
sum%=;
struct ListNode *p4 = (struct ListNode*)malloc(sizeof(struct ListNode));
p4->val=sum;
p4->next=NULL;
p3->next=p4;
p3=p4;
p1=p1->next;
p2=p2->next;
}
return l3->next;
}

1.malloc

用于动态分配内存,用法为:

int *p = (int *)malloc(sizeof(int))

char *ch = (char *)malloc(sizeof(char))

返回一个指针,当资源不足无法分配时返回NULL

可用free()释放内存,用法为:

free(p)

free(ch)

2..链表

第一次写链表,只涉及了链表末端的节点添加,以后继续学习删除、插入、连接等操作,感觉不难,只是在玩IQ题,不过......链表还是得继续好好刷题!

该题的链表节点包括了节点值和下一个节点的位置两个内容,节点值可以是整型、数组等一个或多个变量,下一个节点的位置用p->next引用,但是p->next->value是错误的。

本题需要注意的点是在两数相加时、一数结束时、两数都结束时判断是否需要进一位。

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

C语言链表之两数相加的更多相关文章

  1. C语言实现两数相加2018-09-23

    /*给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 ...

  2. Leetcode算法系列(链表)之两数相加

    Leetcode算法系列(链表)之两数相加 难度:中等给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字.如果,我们将 ...

  3. 用单向链表实现两数倒序相加(java实现)

    很久没做算法题了,准备重操旧业,于是刷了一波LeetCode,看到一个比较经典的链表算法题,分享出来. 题目 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将 ...

  4. leetcode 链表 两数相加

     两数相加     给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例 ...

  5. 程序员之---C语言细节20(符号和有符号之间转换、两数相加溢出后数值计算)

    主要内容:无符号和有符号之间转换.两数相加溢出后数值计算 #include <stdio.h> /* 这个函数存在潜在漏洞 */ float sum_elements(float a[], ...

  6. Leetcode(2)-两数相加(包含链表操作的注意事项)

    给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 -& ...

  7. LeetCode(2):Add Two Numbers 两数相加

    Medium! 题目描述: 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头 ...

  8. LeetCode :2.两数相加 解题报告及算法优化思路

    题目连接:2.两数相加 题意 题目难度标为 中等, 因为题意上有一部分理解难度,以及需要数据结构的链表基础. 还不知道到链表的童鞋可以粗略的看下百度百科或者是翻出数据结构的书看一看,通俗一点的语言来解 ...

  9. [Swift]LeetCode2. 两数相加 | Add Two Numbers

    You are given two non-empty linked lists representing two non-negative integers. The digits are stor ...

随机推荐

  1. 多项式乘法(FFT)模板 && 快速数论变换(NTT)

    具体步骤: 1.补0:在两个多项式最前面补0,得到两个 $2n$ 次多项式,设系数向量分别为 $v_1$ 和 $v_2$. 2.求值:用FFT计算 $f_1 = DFT(v_1)$ 和 $f_2=DF ...

  2. centos6.5解压及压缩zip压缩包

    查看zip压缩文件的内容而不解压:unzip -l filename.zip 将zip包解压到指定路径(若不指定路径则为当前目录):unzip filename.zip -d /usr/file 压缩 ...

  3. Codeforces Round #455 (Div. 2) 909D. Colorful Points

    题 OvO http://codeforces.com/contest/909/problem/D CF 455 div2 D CF 909D 解 算出模拟的复杂度之后就是一个很水的模拟题 把字符串按 ...

  4. Java对象间的关系

    1 综述 在Java中对象与对象的关系总体分为四类,分别是:依赖.关联.聚合和组合. (1)依赖(Dependency)关系是类与类之间的联接.依赖关系表示一个类依赖于另一个类的定义,一般而言,依赖关 ...

  5. java学习第一天:环境的配置

    1.下载JDK,当前版本下载地址为:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.htm ...

  6. ege图形库之简单贪吃蛇(c++)

    第二次做动画显示效果的小程序,心血来潮想做下儿时的经典游戏----贪吃蛇.由于时间有限,只是简单地做了基本功能,有时间后再完善更多功能. 由于个人水平有限,可能代码有些地方可以改进.不足之处敬请指出. ...

  7. Codeforces 959D. Mahmoud and Ehab and another array construction task(构造, 简单数论)

    Codeforces 959D. Mahmoud and Ehab and another array construction task 题意 构造一个任意两个数都互质的序列,使其字典序大等于a序列 ...

  8. LVS集群之DR模式

    今天来讲LVS-DR模式集群实现负载均衡的搭建方法 环境 主机名 IP   系统 角色 dir DIP:192.168.199.9 VIP:192.168.199.8 rhel7.4 集群服务器 no ...

  9. CodeForces 755D PolandBall and Polygon ——(xjbg)

    每次连线,起点和终点之间,每一个被点亮的点,这些点都能连出去两条线,因此可以增加的块数+2(1这个点除外,因为只有连出的点没有连进的点),计算起点和终点之间有几个点被点亮即可,然后1这个点特判一下.感 ...

  10. 使用 python 编写一个授权登录验证的模块

    使用 python 编写一个授权登录验证的模块 我们编写的思路: 1.登录的逻辑:如果用户名和密码正确,就返回 token . 2.生成 token 的逻辑,根据用户名,随机数,当前时间 + 2 小时 ...