C语言链表之两数相加
题目描述
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 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语言链表之两数相加的更多相关文章
- C语言实现两数相加2018-09-23
/*给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 ...
- Leetcode算法系列(链表)之两数相加
Leetcode算法系列(链表)之两数相加 难度:中等给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字.如果,我们将 ...
- 用单向链表实现两数倒序相加(java实现)
很久没做算法题了,准备重操旧业,于是刷了一波LeetCode,看到一个比较经典的链表算法题,分享出来. 题目 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将 ...
- leetcode 链表 两数相加
两数相加 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例 ...
- 程序员之---C语言细节20(符号和有符号之间转换、两数相加溢出后数值计算)
主要内容:无符号和有符号之间转换.两数相加溢出后数值计算 #include <stdio.h> /* 这个函数存在潜在漏洞 */ float sum_elements(float a[], ...
- Leetcode(2)-两数相加(包含链表操作的注意事项)
给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 -& ...
- LeetCode(2):Add Two Numbers 两数相加
Medium! 题目描述: 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头 ...
- LeetCode :2.两数相加 解题报告及算法优化思路
题目连接:2.两数相加 题意 题目难度标为 中等, 因为题意上有一部分理解难度,以及需要数据结构的链表基础. 还不知道到链表的童鞋可以粗略的看下百度百科或者是翻出数据结构的书看一看,通俗一点的语言来解 ...
- [Swift]LeetCode2. 两数相加 | Add Two Numbers
You are given two non-empty linked lists representing two non-negative integers. The digits are stor ...
随机推荐
- Bootstrap-轮播图-No.4
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
- 队列BlockingQueue的简单例子
队列,当进行多线程编程的时候,很多时候可能会用到,队列是先进先出的,我们可以将要执行的任务放置在队列内缓存起来,当线程池中线程可以使用的时候,我们就从队列中获取一个任务执行.. 当前是一个队列的简单例 ...
- CodeForces 835D - Palindromic characteristics | Codeforces Round #427 (Div. 2)
证明在Tutorial的评论版里 /* CodeForces 835D - Palindromic characteristics [ 分析,DP ] | Codeforces Round #427 ...
- CentOS 7 yum update 升级提示:PackageKit 锁定解决方案
CentOS 7 系列新安装后都会进行yum update操作,但每次都会遇到PackageKit 锁定问题,提示如下: /var/run/yum.pid 已被锁定,PID 为 2694 的另一个程序 ...
- PHP mysqli_fetch_row() 函数
定义和用法 mysqli_fetch_row() 函数从结果集中取得一行,并作为枚举数组返回. <?php // 假定数据库用户名:root,密码:123456,数据库:RUNOOB $con= ...
- SpringBoot+Mybatis-Plus两种分页方法
用到的依赖: <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus ...
- 【原创】洛谷 LUOGU P3366 【模板】最小生成树
P3366 [模板]最小生成树 题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出orz 输入输出格式 输入格式: 第一行包含两个整数N.M,表示该图共有N个结点和M条无向边.(N ...
- 7.19T2
小 B 的树 题目背景及题意 小 B 有一颗树,它的形态与 OI 中的树相同,有 n 个节点,n-1 条边,每条边长度为 1 随着时间的流逝这棵树长大了,每条边有 50%的概率长度变为 2 小 B ...
- 两个int值相乘超过int最大值
System.out.println(100000000*1000 ); //输出结果是:1215752192 先将100000000*1000 的结果转化为二进制: 10111 01001000 0 ...
- shell编程之 ()[] {}
shell脚本中各种括号的区别以及用法 2018年08月19日 14:55:33 M_QiJunChao 阅读数:273 最近学到了shell脚本编程,觉得脚本中的不同括号有不同的用处,以及有些括 ...