链式A+B

来源:互联网 发布:域名错误691是什么原因 编辑:程序博客网 时间:2024/06/05 02:07

题目描述

有两个用链表表示的整数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表的首部。编写函数对这两个整数求和,并用链表形式返回结果。
给定两个链表ListNode* A,ListNode* B,请返回A+B的结果(ListNode*)。
测试样例:
{1,2,3},{3,2,1}
返回:{4,4,4}

C/C++实现

 /*struct ListNode {    int val;    struct ListNode *next;    ListNode(int x) : val(x), next(NULL) {}};*/class Plus {public:    ListNode* plusAB(ListNode* a, ListNode* b) {        // write code here        if(a==nullptr)            return b;        if(b==nullptr)            return a;        ListNode *newlist=new ListNode(0);        ListNode *pNew=newlist;        ListNode *pa=a;        ListNode *pb=b;        int carry=0;        while(pa&&pb){            int data=pa->val+pb->val+carry;            if(data>=10){                data-=10;                carry=1;            }            else{                carry=0;            }            ListNode *Node=new ListNode(data);            pNew->next=Node;            pNew=pNew->next;            pa=pa->next;            pb=pb->next;       }        while(pa!=nullptr){            int data=pa->val+carry;            if(data>9){                data-=10;                carry=1;            }            else{                carry=0;            }            ListNode *Node=new ListNode(data);            pNew->next=Node;            pNew=pNew->next;            pa=pa->next;        }        while(pb!=nullptr){            int data=pb->val+carry;            if(data>9){                carry=1;                data-=10;            }            else{                carry=0;            }            ListNode *Node=new ListNode(data);            pNew->next=Node;            pNew=pNew->next;            pb=pb->next;        }        if(carry){            ListNode *Node=new ListNode(1);            pNew->next=Node;            pNew=pNew->next;        }        return newlist->next;    }}; 
0 0