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 ...
随机推荐
- shell 跟$有关的各种怪命令集锦
$ 这个程式的执行名字 $n 这个程式的第n个参数值,n=.. $* 这个程式的所有参数,此选项参数可超过9个. $# 这个程式的参数个数 $$ 这个程式的PID(脚本运行的当前进程ID号) $! 执 ...
- vue中使用v-chart改变柱状图颜色以及X轴Y轴的文字颜色和大小以及标题
1.html部分 <ve-histogram :tooltip-visible="true" :x-axis="xAxis" :y-axis=" ...
- CSP-S2019游记——终点
准退役一年了,回来苟CSP,填补去年留下的遗憾,也算是为这个不那么完美的高中OI生涯划一个句点吧. DAY 1 考前:昨天晚上睡得不太好.早上洛谷打卡居然是中吉(3K说的大吉嘞???).在地铁上有点犯 ...
- HGOI 20191103am 题解
Problem A number 使用一个$2^k$数集中每个元素的和表示数$n$,不同集合的数目有多少? 对于$100\%$的数据满足$1 \leq n \leq 10^6$ Solution : ...
- 二维FFT,IFFT,c语言实现
学习DIP第6天 完整内容迁移至http://www.face2ai.com/DIP-2-4-二维FFT-IFFT-c语言实现/ http://www.tony4ai.com/DIP-2-4-二维FF ...
- python 装饰器,传递类以及参数
#!/usr/bin/env python # coding=utf- import time #import redis class RedisLock(object): def __init__( ...
- MySQL之pymysql
pymysql的安装 pip install PyMySQL 连接数据库 import pymysql db = pymysql.connect("数据库ip","用 ...
- Linux网络编程五、套接字超时
1.accept超时 accept等待并接受连接请求的过程是阻塞的,可以通过IO转接来设置等待一定的时长,如果超时没有连接,就让这个函数返回,让当前进程/线程处理别的任务. 例: // 最大的文件描述 ...
- ci 框架中defined('BASEPATH') OR exit('No direct script access allowed');
作用: OR 就是前面的是true时,就不走后面了. 加这个是为了防止不是从index.php访问到的控制器
- 搭建Django项目虚拟环境(Windows系统下)
一.安装virtualenv 我们可以使用正式的Python环境中的pip进行安装.进入cmd界面,运行“ pip install virtualenv ”,完成安装后,可以运行“ where vir ...