leetcode-Add Two Numbers

来源:互联网 发布:我知天下事手抄报 编辑:程序博客网 时间:2024/05/01 12:23

 

/** * 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;                }};


0 0
原创粉丝点击