算法2.5:链式A+B

来源:互联网 发布:linux递归创建目录 编辑:程序博客网 时间:2024/06/05 08:27

题目描述

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

测试样例:
{1,2,3},{3,2,1}
返回:{4,4,4}

思路分析:因为链表中第一个是个位,以此类推,当两个链表需要考虑:当个位相加时,会进位;当一个链表比另一个短时,直接将另一个加到末尾;两个相同长度时,最后一位加完,若有进位则还要加上1。

题目答案:

/*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        int sum=0,ca=0;        ListNode* c;          c=(ListNode *)malloc(sizeof(ListNode));        ListNode* p=c;        while(a!=NULL||b!=NULL||ca!=0)        {               int at=a?a->val:0;            int bt=b?b->val:0;            sum=at+bt+ca;            //if(sum==0)   break;            ca=sum/10;            sum=sum%10;            ListNode *temp=(ListNode *)malloc(sizeof(ListNode));            temp->val=sum;            p->next=temp;            p=p->next;            a=a?a->next:NULL;            b=b?b->next:NULL;        }       // p->next=NULL;        return c->next;    }};
0 0