Add Two Numbers 看着简单,其实各种奇葩情况需要考虑。。。
来源:互联网 发布:质量数据分析管理办法 编辑:程序博客网 时间:2024/06/10 06:15
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution {public: ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) { int v1,v2,v,a=0; if(l1==NULL&&l2==NULL) return NULL; ListNode *l=new ListNode(0);//有一个错误就是,头指针不能变,始终指向头部,然后指针用于定位插入位置 //所以建立一个新链表必须要三个指针,头指针,遍历指针,还有新节点的指针 //注意头指针的下一个位置才是真正存数据的 ListNode *p=l; while(l1&&l2) { ListNode *node=new ListNode(0); v1=l1->val; v2=l2->val; v=(v1+v2+a)%10; a=(v1+v2+a)/10; l1=l1->next; l2=l2->next; node->val=v; p->next=node; p=p->next; } //没有考虑两个链表长度一样, 出现最后一次相加还有进位 的情况 //没有考虑l1,l2本身大于10的进位情况 //最需要注意的是,关于最后一次进位的条件判断应该放在,所有相同或者不同长度链之后!! while(l1) { ListNode *node=new ListNode(0); node->val=(l1->val+a)%10; a=(l1->val+a)/10; p->next=node; p=p->next; l1=l1->next; } while(l2){ ListNode *node=new ListNode(0); node->val=(l2->val+a)%10; a=(l2->val+a)/10; p->next=node; p=p->next; l2=l2->next; } if(l1==NULL&&l2==NULL&&a!=0)//放最后,以防附加后的链路最后一次还有进位 { ListNode *node=new ListNode(a); p->next=node; } return l->next; }};
0 0
- Add Two Numbers 看着简单,其实各种奇葩情况需要考虑。。。
- leetcode Add Two Numbers---需要再看
- leetcode Add Two Numbers 没什么好说的,考虑全面即可~
- Add two numbers & Add binary
- 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 Numbers
- LeetCode Add Two Numbers
- [LeetCode] Add Two Numbers
- LeetCode4: Add Two Numbers
- Leetcode : Add Two Numbers
- Add Two Numbers
- 【leetcode】Add Two Numbers
- 触摸控制移动与缩放算法 - Cocos2d-JS + CocosBuilder
- CocoaLumberjack使用案例
- 关于软件PicDecor的制作笔记(三)
- C++ template--类模版Stack的实现
- URAL 1204. Idempotents 扩展欧几里德
- Add Two Numbers 看着简单,其实各种奇葩情况需要考虑。。。
- 《红孩儿引擎内功心法修练与Cocos2d-x》之结点系统(场景,层,精灵)(精)
- vim显示行号、语法高亮、自动缩进的设置
- PROC系列之---/proc/pid/stat
- 访问者模式之C++实现
- Next Permutation
- top命令详解
- uva 10012
- Merge Intervals 合并区间