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 ...
随机推荐
- 关于github报错 ssh: connect to host github.com port 22: Connection timed out fatal: Could not read from remote repository.
今天上午写demo的时候,突然pull不下代码了,报了一下这样情况的错误: 看了一下代码,怀疑是网路错误,因为在这以前一切都正常的,然后将代码复制搜索了一番,解决办法有很多什么配置config啦,gi ...
- 在cubemx中使用freertos中的注意事项
就是使用信号量等rtos自带特性的时候,务必先初始化然后在发生信号量或接收. 而且在中断中发送信号量或队列的时候,务必把使能中断的语句放在初始化freertos之后,尤其是cubemx生成的代码,默认 ...
- AtCoder AGC001E BBQ Hard (DP、组合计数)
题目链接: https://atcoder.jp/contests/agc001/tasks/agc001_e 题解: 求\(\sum^n_{i=1}\sum^n_{j=i+1} {A_i+A_j+B ...
- Java中jdk代理和cglib代理
代理模式 给某一个对象提供一个代理,并由代理对象控制对原对象的引用.在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 在Java中代理模式从实 ...
- PAT L2-001 紧急救援 —— (多参数最短路)
和天梯中的直捣黄龙差不多.但是,通过这个问题,我对多参数最短路又有了更深一层的了解. 这题因为点数比较多,所以如果直接用大力学长的在G上dfs找最短路径的条数的话,会TLE,所以需要剪枝.剪枝方法是, ...
- dcokee 安装 nginx
1,docker pull openresty/openresty 2, mkdir /opt/local/openresty 等等文件夹 3, docker run --name=" ...
- 【洛谷2050】 [NOI2012]美食节(费用流)
大家可以先看这道题目再做! SCOI2007修车 传送门 洛谷 Solution 就和上面那道题目一样的套路,但是发现你会获得60~80分的好成绩!!! 考虑优化,因为是SPFA,所以每一次只会走最短 ...
- ARTS打卡计划第十周
Algorithms: https://leetcode-cn.com/problems/next-greater-node-in-linked-list/ 链表中下一个更大的值,双层循环及优化,后面 ...
- 【sed】进阶
sed的基本用法已能满足大多数需求,但当需要时,知道这些高级特效的存在及如何使用将提供莫大的帮助! 1. 多行命令 sed编辑器提供三个用于处理多行文本的特殊命令: N:将数据 ...
- JWT加密解密
如何保证WebAPI的安全?1.JWT加密解密.token2.使用https传输协议.3.把用户所有请求的参数信息加上一个只有服务器端知道的secret,做个散列运算,然后到了服务器端,服务器端也做一 ...