编程练习: 两数相加
题目-LeetCode
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
1
2
3 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
分析
- 这其实是链表的操作,在之前数据结构中很常见,对两个链表进行操作;
- 另外这里两数被表示成链表形式,比如
2->4->3
个位是2,十位是4,百位是3;其实可以按照算术中的加法,个位与个位相加、、、,所以这样就比较简单了;链表长度
- 两个链表长度相同比较好处理,但是还要注意链表长度不一样带来的问题;详细见代码分析!
实现(java)
节点表示
1
2
3
4
5
6
7
8/**
* 列表节点定义
*/
class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x;}
}
处理函数
1 | /** |
这段代码中还可以优化,当时在提交到LeetCode不正确后,变只图通过测试,没有考虑到性能!
主函数调用
1 | public static void main(String[] args) { |
结果
1 | 8->8->8 |
最后
此致,敬礼!