给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。

你可以假设除了数字 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)-两数相加(包含链表操作的注意事项)的更多相关文章

  1. LeetCode 445——两数相加 II

    1. 题目 2. 解答 2.1 方法一 在 LeetCode 206--反转链表 和 LeetCode 2--两数相加 的基础上,先对两个链表进行反转,然后求出和后再进行反转即可. /** * Def ...

  2. Leetcode 002. 两数相加

    1.题目描述 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表 ...

  3. LeetCode 2——两数相加(JAVA)

    给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...

  4. 【LeetCode】两数相加

    题目描述 给出两个非空的链表用来表示两个非负的整数.其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和. ...

  5. Leetcode 445. 两数相加 II

    1.题目描述 给定两个非空链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储单个数字.将这两数相加会返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. ...

  6. LeetCode 445. 两数相加 II(Add Two Numbers II)

    445. 两数相加 II 445. Add Two Numbers II 题目描述 给定两个非空链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储单个数字.将这两数相加会返回一个 ...

  7. Java实现 LeetCode 2 两数相加

    两数相加 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...

  8. leetcode TOP100 两数相加

    两数相加 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...

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

    2. 两数相加 2. Add Two Numbers 题目描述 You are given two non-empty linked lists representing two non-negati ...

随机推荐

  1. [usaco2008 Oct]Pasture Walking 牧场旅行

    题目描述 n个被自然地编号为1..n奶牛(1<=n<=1000)正在同样被方便的编号为1..n的n个牧场中吃草.更加自然而方便的是,第i个奶牛就在第i个牧场中吃草. 其中的一些对牧场被总共 ...

  2. linux下安装zsh和p10k的详细过程

    目录 下载zsh 下载oh-my-zsh 切换shell 下载p10k 下载zsh sudo apt-get install zsh sudo apt-get install git 下载oh-my- ...

  3. history附上时间戳,history命令_Linux history命令:查看和执行历史命令

    起因是这样的,一台机器客户反馈连接不上,说没有任何操作.好吧,排查吧. 1.第一步先看网络是否通: 从图中可以看到一开始是一直不通的.然后就通了,问了客户有没操作重启什么的结果说没有任何操作,还让给个 ...

  4. Caffeine 缓存库

    介绍 Caffeine是一个基于Java8开发的提供了近乎最佳命中率的高性能的缓存库. 缓存和ConcurrentMap有点相似,但还是有所区别.最根本的区别是ConcurrentMap将会持有所有加 ...

  5. jQuery 当前展开其他收缩 三级下拉菜单(转载)

    jQuery可展开收缩三级下拉菜单 <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...

  6. 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 ...

  7. udp 连接

    在今天的内容里,我对 UDP 套接字调用 connect 方法进行了深入的分析.之所以对 UDP 使用 connect,绑定本地地址和端口,是为了让我们的程序可以快速获取异步错误信息的通知,同时也可以 ...

  8. trust an HTTPS connection 安全协议 随机数 运输层安全协议 应用层安全协议 安全证书

    小结: 1.HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间) HTTPS(全称:Hyper Text Transfer Protocol over Secure ...

  9. CF1209A

    所谓染色,并使同颜色数都能被当前颜色中最小的数整除 也就是说,把能被某个数整除的所有数放在一起为一组,问共有几组 开始我想写个并查集但是很懒,看数据范围小的可怜,那我们写个暴力看看 因为每组的共因数都 ...

  10. Centos7服务器安装Docker及Docker镜像加速,Docker删除

    Centos7服务器安装Docker及Docker镜像加速,Docker删除 1.Centos7服务器安装Docker 1.1 root账户登录,查看内核版本如下 1.1.1 卸载服务器旧版本Dock ...