Leetcode :2 Add Two Numbers

来源:互联网 发布:催收数据安全管理制度 编辑:程序博客网 时间:2024/04/30 05:53

LEETCODE:
题目信息


题意理解:

也就是给定两个非空链表,然后按照十进制加法处理这两个链表并存入一个新链表中。


先将解题代码放上:

class Solution {public:    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {        ListNode* l3;        ListNode* old;        bool ok = true;        int zero = 0;        while(l1 != NULL || l2 != NULL || zero != 0){            int x = 0;            if(l1 != NULL && l2 != NULL){                x = (l1->val + l2->val + zero)%10 ;                zero = (l1->val + l2->val + zero)/10;                // cout<<x<<endl;                l1 = l1->next;                l2 = l2->next;            }else if(l1 == NULL && l2 != NULL){                x =  (l2->val + zero)%10;                zero = (l2->val + zero)/10;                l2 = l2->next;            }else if(l1 != NULL && l2 == NULL){                x =  (l1->val + zero)%10;                zero = (l1->val + zero)/10;                l1 = l1->next;            }            else            {                x = zero;                zero = 0;            }            if(ok) {                l3 = new ListNode(x);                ok = false;                old = l3;            }else{                l3->next = new ListNode(x);                l3 = l3->next;            }        }        return old;    }};
  • 算法:
    根据题意,我们可以知道,基本上这道题就是将两个”大“数加在一起,从个位开始按照十进制进位。
    所以我们可以取出两个链表相应位值的数字相加,然后用变量zero记录每次的进位,每次使用进位后在计算出进位即可。(参考高精度加法)
    解题过程中,各种测试例子基本都会存在,比较典型的是测试进位,l1比l2长,l2比l1长。
    所以按照相应情况分类讨论即可。

    -另一种思路(部分分):
    我们可以将两个链表分别化为一个数字,然后让他们想加,再逐个拆分数字存入链表即可。
    这样在链表很长的时候就不可行了,因为不存在一种类型能存放100位的整数,但是不失为一个不错的思考方向。