leetcode 2 两数相加

由低位加到高位一般比较方便,考虑进位问题(通过引入flag和最后的if表达式),两树长度不相等的情况(通过引入三个while循环)

需要变量:pre,cur两个链表节点,记录头结点之前的节点a=new ListNode(-1)

 

/**
 * 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* a=new ListNode(-1);
        ListNode*pre,*cur;
        pre=a;
        int flag=0;
        while(l1&&l2){
            int v=l1->val+l2->val+flag;
            flag=0;
            if(v>=10){flag=1,v=v%10;}
            cur=new ListNode(v);
            pre->next=cur;pre=cur;
            l1=l1->next,l2=l2->next;
        }
        while(l1){
            int v=l1->val+flag;
            flag=0;
            if(v>=10){flag=1,v=v%10;}
            cur=new ListNode(v);
            pre->next=cur;pre=cur;
            l1=l1->next;
        }
        while(l2){
            int v=l2->val+flag;
            flag=0;
            if(v>=10){flag=1,v=v%10;}
            cur=new ListNode(v);
            pre->next=cur;pre=cur;
            l2=l2->next;
        }
        if(flag){
            cur=new ListNode(1);
            pre->next=cur;
        }
        return a->next;
    }
};

 

posted @ 2019-05-23 21:07  Joel_Wang  阅读(278)  评论(0编辑  收藏  举报