2. Add Two Numbers(Medium)
来源:互联网 发布:诺基亚5800软件下载 编辑:程序博客网 时间:2024/05/29 03:01
原题目:
You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
题目大意如下:
将两个用非空链表逆序表示的数字加起来,每个节点包含十进制数的一个位。最后将答案以链表形式返回。
解题思路:
大致类似于竖式加法的算法,用到了一点归并的思想。测试样例中有需要注意的比如【1】和【9,9】,一定要注意连续的进位。【5,5】,要注意当计算完成时是否依然有进位。
代码如下:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode* p = l1 ; ListNode* q = l2 ; int m = p->val + q->val ; //m表示进位 int n ; //n表示当前位对应加起来的结果 ListNode* ans = new ListNode(m%10) ; //首先单独构造个位结果 ListNode* rear = ans ; p = p->next ; q = q->next ; //如果只有个位相加,计算结束,但需要另外判断是否有进位 if(q == NULL && p == NULL && m/10) rear->next = new ListNode(1) ; while(p != NULL && q != NULL){ n = p->val + q->val ; //每一位计算结果=当前结果+进位(0或1),再取余 rear->next = new ListNode((n + m/10)%10) ; rear = rear->next ; p = p->next ; q = q->next ; m = n + m/10 ; //更新进位 //同样,如果当计算结束的时候还有进位,也要写出来 if(q == NULL && p == NULL && m/10) rear->next = new ListNode(1) ; } //当其中有一个数字位数计算完成时 while(p != NULL){ //依然要考虑前面的进位和当计算完成时是否有进位 rear->next = new ListNode((p->val + m/10)%10) ; rear = rear->next ; m = p->val + m/10 ; p = p->next ; if(p == NULL && m/10) rear->next = new ListNode(1) ; } while(q != NULL){ rear->next = new ListNode((q->val + m/10)%10) ; rear = rear->next ; m = q->val + m/10 ; q = q->next ; if(q == NULL && m/10) rear->next = new ListNode(1) ; } return ans ; }};
运行结果:
0 0
- 2. Add Two Numbers(Medium)
- 2. Add Two Numbers Medium
- Add Two Numbers [Medium]
- Add Two Numbers(medium)
- [Medium]Add Two Numbers
- Leetcode 2. Add Two Numbers (Medium) (cpp)
- 2. Add Two Numbers 难度:Medium
- 【leetcode】2. Add Two Numbers 【medium】
- LeetCode 2. Add Two Numbers[Medium]
- 【leetcode medium】2. Add Two Numbers
- Leet Code OJ 2. Add Two Numbers [Difficulty: Medium]
- 2.Add Two Numbers(medium)[链表处理 大数相加]
- 题解——Leetcode 2. Add Two Numbers 难度:Medium
- Leetcode解题笔记 2.Add Two Numbers [Medium]
- 36.Add Two Numbers (链表) Difficulty: Medium
- LeetCode-2-Add Two Numbers(链表)-Medium
- Leet Code Medium 2 add two numbers
- <LeetCode><Medium>2 Add Two Numbers
- SAP 补0
- JVM调优总结(二)-一些概念
- SpringMvc+mybatis 配置
- GCD API讲解<二>
- web通讯-goeasy
- 2. Add Two Numbers(Medium)
- 自定义倒计时TextView
- OpenGL图像缩放的不同插值类型
- 活动运营5步走,打造一场完满的线下活动
- HTML基础之初识HTML
- POJ2431 贪心
- 文本相似度检测(网络爬虫去重算法)
- ip && canutils命令
- JVM调优总结(一)-- 一些概念