给定两个链表表示的整数,编写函数对这两个整数求和,并用链表形式返回结果。
struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; ListNode* Reserve(ListNode* l) { if(l==NULL)return NULL; ListNode *p = NULL; ListNode *tmp = l->next; while(tmp->next!=NULL) { p = tmp->next; tmp->next=p->next; p->next=l->next; l->next=p; } return l; } //给定两个链表表示的整数,每个结点包含一个数位。这些数位是反向存放的, //也就是个位排在链表首部。编写函数对这两个整数求和,并用链表形式返回结果。 /* 示例: 输入:(7->1->6) + (5->9->2), 即:617 + 295. 输出:2->1->9,即:912. */ /* 进阶:假设这些数位是正向存放的,请在做一遍。 示例:(6->1->7) + (2->9->5), 即:617 + 295. 输出:9->1->2, 即:912。 */ //正向的话就先反转然后相加,然后将结果反转就可以了。 ListNode* plusAB(ListNode* a, ListNode* b) { if(a==NULL)return b; if(b==NULL)return a; int carry = 0 ; //进位 ListNode *pa = a , *pb = b; ListNode *newList = new ListNode(0); ListNode *newNode = newList; while(pa!=NULL||pb!=NULL||carry!=0) { int data = 0 ; if(pa!=NULL)data+=pa->val; if(pb!=NULL)data+=pb->val; data+=carry; carry=data/10; data%=10; ListNode *pNode = new ListNode(data); newNode->next = pNode; newNode = newNode->next; if(pa!=NULL)pa=pa->next; if(pb!=NULL)pb=pb->next; } return newList->next; }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: iOS根据日期、数值给model排序
- 下一篇: PHP 三级分类