链表求和
来源:互联网 发布:java whi循环99乘法表 编辑:程序博客网 时间:2024/05/19 17:51
题目描述:你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。
样例:给出两个链表 3->1->5->null 和 5->9->2->null,返回 8->0->8->null
首先,解释一下题意,拿样例来说,其实是295+513,然后,将结果保存在一个链表中,保存时,应先保存这个数值的个位数,再十位数,。。。
这其实和数组求和(用数组保存加数,求和)的问题是一样的,都是对应位加和,如果大于10,向后(因为是倒序保存,所以向后)进1位,为了避免链表复杂的操作,我们采取完全新建一个链表的方法,也就是新建一个链表,然后对给出的两个链表对应位处理,用处理结果生成一个新的节点,跟在新建的链表后面。
那样例来说,我们首先新建一个节点dummy,dummy->None,再用一个整型变量add1来保存是否向后进位。add1初始化为0
1. 3 + 5 + add1 = 8, dummy->8->None,add1 = 0
2. 1 + 9 + add1 = 10, dummy->8->0->None, add1 = 1
3. 5 + 2 + add1 =8, dummy->8->0-8->None, add1 = 0
当两个链表全都遍历完时,还要看add1是否为1,若为1,再生成一个值为1的节点,跟在新生成的链表后面。
这里面需要特别注意两个问题:
1. 加和的两个链表长度不一定相等,如果不等,我们要先按对应位处理,完毕后再根据add1的值和没处理完的链表的部分构建节点,添加
2. add1的作用很重要,要始终存在于加和过程中,最后“都不能放过”
看代码:
# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: # @param l1: the first list # @param l2: the second list # @return: the sum list of l1 and l2 def addLists(self, l1, l2): cur1, cur2 = l1, l2 dummy = ListNode(-1) pre = dummy add1 = 0 while cur1 or cur2: if cur1 and cur2: temp = (cur1.val + cur2.val + add1) cur1 = cur1.next cur2 = cur2.next elif cur1: temp = (cur1.val + add1) cur1 = cur1.next else: temp = (cur2.val + add1) cur2 = cur2.next add1 = temp // 10 pre.next = ListNode(temp % 10) pre = pre.next if add1 == 1: pre.next = ListNode(1) return dummy.next # write your code here
- 链表求和 & 二进制求和
- 链表多项式求和
- 链表求和
- LintCode 链表求和
- 链表求和
- lintcode ----链表求和
- 链表求和
- 链表求和
- 链表求和
- 链表求和
- 链表求和
- 链表求和
- 链表求和
- 链表求和
- LintCode 链表求和
- 链表求和-LintCode
- 链表求和
- 链表求和
- 寻找你的乘法人生—徐大伟_David
- 7.3 命名空间
- 计算地球上2点之间的距离
- J2EE环境搭建(二)安装Eclipse插件和第一个Eclipse项目
- HDU2037------贪心算法排序
- 链表求和
- 剑指offer----用两个队列实现一个栈(java代码)
- HBase分布式安装配置图文详解
- C# winform中DataGridView最常用的知识点
- [C++]实现--讨论关于实现中可能出现的问题
- [系统运维]进程的守护神 - Supervisor
- 第一篇自己的博客(java,android)
- win10安装nginx
- 【一天一道LeetCode】#34. Search for a Range