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
- Add Two Nums
- Add Two Nums
- LeetCode(2) Add Two Nums
- leetcode_add two nums
- leetcode two nums c++实现
- Add two numbers & Add binary
- Two Sum & Add Two Numbers
- 题Two--Add Two Numbers
- LeetCode: Add Two Numbers
- Add Two Numbers
- LeetCode: Add Two Numbers
- [LeetCode]Add Two Numbers
- LeetCode Add Two Numbers
- Leetcode: Add Two Numbers
- Add Two Numbers
- [Leetcode] Add Two Number
- LeetCode : Add Two Numbers
- LeetCode Add Two Numbers
- org.hibernate.AssertionFailure: null id in com.base.program.entity.Program entry (don't flush the S
- 远程控制一二三
- yum 和rpm的区别
- 磁力传感器工作原理
- 局域网机器中如何访问VMware内的虚拟机
- Add Two Nums
- runtime 类和对象的使用和基本的数据结构
- Red Hat上安装Eclipse经验总结
- Java7、Java8新特性了解
- java中堆和栈详解
- 混淆打包
- java中InputStream转化为byte[]数组
- 一个由PROGUARD与FASTJSON引起的血案
- java对象与字符串之间的序列化和反序列化