Add Two Nums

来源:互联网 发布:淘宝联盟怎么赚取佣金 编辑:程序博客网 时间:2024/06/05 17:52

Add Two Nums

*出错版本:#include <iostream>using namespace std;struct ListNode {      int val;      ListNode *next;      ListNode(int x) : val(x), next(NULL) {}};ListNode* addTwoNumbers(ListNode* l1, ListNode* l2);int main(void){    ListNode *m = new ListNode(0);    ListNode *n = new ListNode(0);    ListNode *p = new ListNode(0);    m->val = 0;    m->next = NULL;    n->val = 0;    n->next = NULL;    p = addTwoNumbers(m,n);    while(p)    {        cout<<p->val<<endl;    }       system("pause");    return 0;}ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {        ListNode* a = l1;        ListNode* b = l2;        ListNode *c = new ListNode(0);        ListNode *ans = c;        ListNode *next = c;        int car=0;        while(a || b || car)        {            if((a = NULL) && (b = NULL) && (car !=0))//这里有重大错误,不能用=,而应该用==。后面同理。            {                c->val = car;                c->next = NULL;                car = 0;            }            else if(a = NULL)            {                c->val = b->val + car;                b = b->next;                ListNode *next = new ListNode(0);                c->next = next;                c = c->next;                car = 0;            }            else if(b = NULL)            {                c->val = a->val + car;                a = a->next;                ListNode *next = new ListNode(0);                c->next = next;                c = c->next;                car = 0;            }            else            {                c->val = ((a->val + b->val + car)%10);                car = (a->val + b->val + car)/10;                a = a->next;                b = b->next;                ListNode *next = new ListNode(0);                c->next = next;                c = c->next;            }        }        return ans;    }* 调试过程:#include <iostream>//#include <stdio.h>using namespace std;struct ListNode {      int val;      ListNode *next;      ListNode(int x) : val(x), next(NULL) {}};ListNode* addTwoNumbers(ListNode* l1, ListNode* l2);int main(void){    ListNode *m = new ListNode(0);    ListNode *n = new ListNode(0);    ListNode *p = new ListNode(0);    m->val = 5;    m->next = NULL;    n->val = 5;    n->next = NULL;    p = addTwoNumbers(m,n);    while(p)    {        cout<<p->val<<endl;        p=p->next;    }    getchar();    return 0;}ListNode* addTwoNumbers(ListNode* a, ListNode* b) {        //ListNode* a = new ListNode(0);        //ListNode* b = new ListNode(0);        ListNode *c = new ListNode(0);        ListNode *ans = c;        ListNode *pre = c;        int car=0;        /*        while(a && b)        {            c = new ListNode(0);            //c->val = ((a->val + b->val + car)%10);            car = (a->val + b->val + car);            c->val = car%10;            car = car/10;            a = a->next;            b = b->next;            pre->next = c;            pre = pre->next;        }        while(a)        {            c = new ListNode(0);            c->val = ((a->val + car)%10);            car = (a->val + car)/10;            a = a->next;            pre->next = c;            pre = pre->next;        }        while(b)        {            c = new ListNode(0);            c->val = ((b->val + car)%10);            car = (b->val + car)/10;;            b = b->next;            pre->next = c;            pre = pre->next;        }        if(car)        {            c = new ListNode(0);            c->val = car;            c->next = NULL;            pre->next = c;            pre = pre->next;            car = 0;        }        */        while((a != NULL) || (b != NULL) || (car !=0))        {            if(a==NULL && b==NULL && (car !=0))            {                c = new ListNode(0);                c->val = car;                c->next = NULL;                pre->next = c;                pre = pre->next;                car = 0;            }            else if(a==NULL)            {                c = new ListNode(0);                c->val = ((b->val + car)%10);                car = (b->val + car)/10;;                b = b->next;                pre->next = c;                pre = pre->next;            }            else if(b==NULL)            {                c = new ListNode(0);                c->val = ((a->val + car)%10);                car = (a->val + car)/10;                a = a->next;                pre->next = c;                pre = pre->next;            }            else            {                c = new ListNode(0);                //c->val = ((a->val + b->val + car)%10);                car = (a->val + b->val + car);                c->val = car%10;                car = car/10;                a = a->next;                b = b->next;                pre->next = c;                pre = pre->next;            }        }        return ans->next;    }   * 正确版本:#include <iostream>//#include <stdio.h>这个和<iostream>只要一个就行using namespace std;struct ListNode {      int val;      ListNode *next;      ListNode(int x) : val(x), next(NULL) {}};ListNode* addTwoNumbers(ListNode* l1, ListNode* l2);int main(void){    ListNode *m = new ListNode(0);    ListNode *n = new ListNode(0);    ListNode *p = new ListNode(0);    m->val = 0;    m->next = NULL;    n->val = 0;    n->next = NULL;    p = addTwoNumbers(m,n);    while(p)    {        cout<<p->val<<endl;        p=p->next;    }    getchar();    return 0;}ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {       int carry = 0;        ListNode *list = new ListNode(0);        ListNode *head = list;        ListNode *prev = list;        while (l1 && l2) {            carry += l1->val + l2->val;            list = new ListNode(0);            list->val = carry % 10;            carry /= 10;            l1 = l1->next;            l2 = l2->next;            prev->next = list;            prev = prev->next;        }        while (l1) {            carry += l1->val;            list = new ListNode(0);            list->val = carry % 10;            carry /= 10;            l1 = l1->next;            prev->next = list;            prev = prev->next;        }        while (l2) {            carry += l2->val;            list = new ListNode(0);            list->val = carry % 10;            carry /= 10;            l2 = l2->next;            prev->next = list;            prev = prev->next;        }        if (carry) {            list = new ListNode(0);            list->val = carry;            prev->next = list;            prev = prev->next;        }        return head->next;    }
0 0
原创粉丝点击