Leetcode(2)-两数相加(包含链表操作的注意事项)
给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
思路:类似于将两个链表融合成一个链表,首先如果有一个链表为空,那么就返回另外一个链表的头结点。如果都不为空,就可以进行相加操作,这里涉及到求和和保存进位的操作。我下面主要记录新建链表的过程中需要注意的地方。
(1)如果newhead = 已有的链表,那么newhead->next是有效的,相当于新建的链表指向了已有的链表,只要已有的这个链表有后面的节点,那么访问next就是合法的
(2)如果我们的做法是新建一个链表的头结点,准备一个个的自己加节点,那么就要注意一定要提前申请好下一个节点的空间,才能对newhead->next做操作
(3)一般在链表的定义部分,要定义一个初始化函数,比如将val初始化为num,将next指针定义为NULL。这样方便初始化一个单独的节点。这样初始化的结果是什么呢。比如ListNode* p= new ListNode(0); 就是p的当前值是0,p->next中val未知,next未知。这个时候可以对p->next做NULL判断,但不可以做其他赋值的操作,否则会有内存访问出错。
(4)如果要加入节点的话。尽量对下一节点做处理,比如我想在链表加入一个值,那么如果p->val=num的话,这个时候p->next是未知的状态,p=p->next这句话没错,这个相当于现在p是未知的状态了。如果还想加入一个值,就很麻烦了,直接用p->val=num会出现内存出错,因为这个时候的p已经是不可访问的了。所以尽量p->next = new ListNode(num),p=p->next。这样p永远指向链表尾端,不加新节点,也不会多申请,加的话,申请一个新的,加到后面。但是这样返回的值,要变成head->next
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2)
{
ListNode *first=l1,*sec=l2,*result;
if(first==NULL) return l2;
if(sec==NULL) return l1;
int sum = 0,carry =0;
result = new ListNode;
ListNode* p = result;
while(first && sec)
{
sum= first->val + sec->val + carry;
p->next = new ListNode(sum%10);
carry = sum/10;
p=p->next;
first=first->next;
sec=sec->next;
}
if(first)
{
p->next=first;
}
else if(sec)
{
p->next=sec;
}
while(carry !=0 && p->next !=NULL)
{
p=p->next;
p->val += carry;
carry = 0;
if(p->val>9)
{
p->val -= 10;
carry = 1;
}
}
if(carry)
{
p->next = new ListNode(carry);
}
return result->next;
}
最后要注意,当两个链表都遍历结束的时候,还要判断下carry位,是1的话,需要再增加一位的,否则会丢失最高位
Leetcode(2)-两数相加(包含链表操作的注意事项)的更多相关文章
- LeetCode 445——两数相加 II
1. 题目 2. 解答 2.1 方法一 在 LeetCode 206--反转链表 和 LeetCode 2--两数相加 的基础上,先对两个链表进行反转,然后求出和后再进行反转即可. /** * Def ...
- Leetcode 002. 两数相加
1.题目描述 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表 ...
- LeetCode 2——两数相加(JAVA)
给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...
- 【LeetCode】两数相加
题目描述 给出两个非空的链表用来表示两个非负的整数.其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和. ...
- Leetcode 445. 两数相加 II
1.题目描述 给定两个非空链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储单个数字.将这两数相加会返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. ...
- LeetCode 445. 两数相加 II(Add Two Numbers II)
445. 两数相加 II 445. Add Two Numbers II 题目描述 给定两个非空链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储单个数字.将这两数相加会返回一个 ...
- Java实现 LeetCode 2 两数相加
两数相加 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...
- leetcode TOP100 两数相加
两数相加 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...
- LeetCode 2. 两数相加(Add Two Numbers)
2. 两数相加 2. Add Two Numbers 题目描述 You are given two non-empty linked lists representing two non-negati ...
随机推荐
- [usaco2008 Oct]Pasture Walking 牧场旅行
题目描述 n个被自然地编号为1..n奶牛(1<=n<=1000)正在同样被方便的编号为1..n的n个牧场中吃草.更加自然而方便的是,第i个奶牛就在第i个牧场中吃草. 其中的一些对牧场被总共 ...
- linux下安装zsh和p10k的详细过程
目录 下载zsh 下载oh-my-zsh 切换shell 下载p10k 下载zsh sudo apt-get install zsh sudo apt-get install git 下载oh-my- ...
- history附上时间戳,history命令_Linux history命令:查看和执行历史命令
起因是这样的,一台机器客户反馈连接不上,说没有任何操作.好吧,排查吧. 1.第一步先看网络是否通: 从图中可以看到一开始是一直不通的.然后就通了,问了客户有没操作重启什么的结果说没有任何操作,还让给个 ...
- Caffeine 缓存库
介绍 Caffeine是一个基于Java8开发的提供了近乎最佳命中率的高性能的缓存库. 缓存和ConcurrentMap有点相似,但还是有所区别.最根本的区别是ConcurrentMap将会持有所有加 ...
- jQuery 当前展开其他收缩 三级下拉菜单(转载)
jQuery可展开收缩三级下拉菜单 <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...
- You shouldn't use *any* general-purpose hash function for user passwords, not BLAKE2, and not MD5, SHA-1, SHA-256, or SHA-3
hashlib - Secure hashes and message digests - Python 3.8.3 documentation https://docs.python.org/3.8 ...
- udp 连接
在今天的内容里,我对 UDP 套接字调用 connect 方法进行了深入的分析.之所以对 UDP 使用 connect,绑定本地地址和端口,是为了让我们的程序可以快速获取异步错误信息的通知,同时也可以 ...
- trust an HTTPS connection 安全协议 随机数 运输层安全协议 应用层安全协议 安全证书
小结: 1.HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间) HTTPS(全称:Hyper Text Transfer Protocol over Secure ...
- CF1209A
所谓染色,并使同颜色数都能被当前颜色中最小的数整除 也就是说,把能被某个数整除的所有数放在一起为一组,问共有几组 开始我想写个并查集但是很懒,看数据范围小的可怜,那我们写个暴力看看 因为每组的共因数都 ...
- Centos7服务器安装Docker及Docker镜像加速,Docker删除
Centos7服务器安装Docker及Docker镜像加速,Docker删除 1.Centos7服务器安装Docker 1.1 root账户登录,查看内核版本如下 1.1.1 卸载服务器旧版本Dock ...