Add Two Numbers 看着简单,其实各种奇葩情况需要考虑。。。
2014-08-31 13:50
239 查看
/** * 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; } };
相关文章推荐
- leetcode Add Two Numbers 没什么好说的,考虑全面即可~
- 简单的两数之和再次乱入<< Add Two Numbers >>
- 两个链表的数字相加(简单题) add two numbers
- leetcode Add Two Numbers---需要再看
- leetcode-2. Add Two Numbers简单的java链表算法题 面试碰到了吗?
- Add two numbers represented by linked lists
- LeetCode Add Two Numbers
- B/S项目中需要考虑系统对各种浏览器的兼容问题
- LeetCode题目之5 Add Two Numbers
- Add Two Numbers
- leetcode 59: Add Two Numbers
- [LeetCode]Add Two Numbers
- mysql大文本数据类型的使用需要考虑实际情况
- add two numbers without using +
- LeetCode Add Two Numbers
- [LeetCode] Add Two Numbers, Solution
- Leetcode: Add Two Numbers
- 【读书笔记】HeadFirst设计模式——单件不简单:详述实现Singleton模式需要考虑的方方面面
- 简单全排列C递归实现 没考虑重复情况
- Add Two Numbers