leetcode-Add Two Numbers

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    int getLength(ListNode *head)
    {
        int len = 0;
        while(head)
        {
            len++;
            head=head->next;
        }
        return len;
    };
    ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) 
    {
        int len1 = getLength(l1);
        int len2 = getLength(l2);
        if(len1==0)
            return l2;
        if(len2==0)
            return l1;
        ListNode *head,  *tmp, *p;
        if(len1<len2)
        {
            tmp = l2;
            l2 = l1;
            l1 = tmp;
        }
        head = l1;
        while(l2)
        {
            l1->val += l2->val;
            l1 = l1->next;
            l2 = l2->next;
        }
        p   = head;
        int carry = 0;
        while(p)
        {
          if((p->val+carry)>9)
          {
              p->val = (p->val+carry)%10;
              carry = 1;
          }
          else
          {
            p->val = p->val + carry;
            carry = 0;  
          }
          tmp = p;
          p = p->next;
        }
        if(carry==1)
            tmp->next = new ListNode(1);
        return head;
            
    }
};

这里进位是向后的,个位在前面

下面的代码是个位在后面的

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    int getLength(ListNode *head)
    {
        int len = 0;
        while(head)
        {
            len++;
            head=head->next;
        }
        return len;
    };
    ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) 
    {
        int len1 = getLength(l1);
        int len2 = getLength(l2);
        if(len1==0)
            return l2;
        if(len2==0)
            return l1;
        ListNode *head, *tmp, *p;
        if(len1<len2)
        {
            tmp = l2;
            l2 = l1;
            l1 = tmp;
        }
        head = l1;
        int len = max(len1,len2) - min(len1,len2);
        while(len--)
            l1 = l1->next;
        while(l1)
        {
            l1->val += l2->val;
            l1 = l1->next;
            l2 = l2->next;
        }
        p   = head;
        head = new ListNode(0);
        head->next = p;
        tmp = head;
        while(p)
        {
            if(p->val==9)
            {
                p = p->next;
            }
            else if(p->val<9)
            {
                tmp = p;
                p   = p->next;
            }
            else
            {
                tmp->val++;
                p->val %= 10;
                while(tmp->next!=p)
                {
                    tmp->next->val = 0;
                    tmp = tmp->next;
                }
                tmp = tmp->next;
                p = p->next;
            }
        }
        if(head->val == 0)
        {
            p = head;
            head = head->next;
            delete p;
        }
        return head;
            
    }
};


每天早上叫醒你的不是闹钟,而是心中的梦~
原文地址:https://www.cnblogs.com/vintion/p/4116825.html