2 Add Two Numbers
2015-09-18 16:22
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) { ListNode* head=new ListNode(0); ListNode* p=head; int c,s; c=0; while(1){ while(l1!=NULL&&l2!=NULL){ //l1和l2都不为空,l1->val+l2->val s=l1->val+l2->val+c; c=s/10; s%=10; p->next=new ListNode(s); p=p->next; l1=l1->next; l2=l2->next; } if(l1==NULL&&l2!=NULL){ //l1为空,l2不为空,0+l2->val s=l2->val+c; c=s/10; s%=10; p->next=new ListNode(s); p=p->next; l2=l2->next; } if(l1!=NULL&&l2==NULL){ //l1不为空,l2为空,l1->val+0 s=l1->val+c; c=s/10; s%=10; p->next=new ListNode(s); p=p->next; l1=l1->next; } if(l1==NULL&&l2==NULL){ //l1和l2都为空,处理进位 if(c>0){ p->next=new ListNode(c); p=p->next; } break; } } head=head->next; return head; } };另:简约代码
/** * 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) { ListNode dummy(-1); int carry = 0; ListNode *prev = &dummy; for (ListNode *pa = l1, *pb = l2;pa != nullptr || pb != nullptr; pa = pa == nullptr ? nullptr : pa->next,pb = pb == nullptr ? nullptr: pb->next,prev = prev->next) { const int ai = pa == nullptr ? 0 : pa->val; const int bi = pb == nullptr ? 0 : pb->val; const int value = (ai + bi + carry) % 10; carry = (ai + bi + carry) / 10; prev->next = new ListNode(value); } if (carry > 0) prev->next = new ListNode(carry); return dummy.next; } };
相关文章推荐
- 黑马程序员——ios开发基础之OC中的面向对象以及对象特性
- 2015.9.18笔记
- Hadoop单节点环境搭建
- Cocos2d-JS 创建node节点示例
- The resource could not be loaded because the App Transport Security policy requires the use of a sec
- CodeForces 13A - Numbers
- socket select函数的详细讲解
- HDOJ 4857 逃生(拓扑排序(邻接表+反向建图,逆序输出+优先队列))
- 倒排索引
- VB.NET与C# 语法show差异
- SSH深度历险记(八) 剖析SSH核心原则+Spring依赖注入的三种方式
- Head First Python学习笔记1
- testng dataprovider 的几种用法以及Java中的二维数组
- 小结(jquery,ui,flexgrid,数据库资源)
- socket 的select函数例子
- python多线程编程:生成者和消费者
- android系统平台显示驱动开发简要:LCD驱动调试篇『四』
- Cocos2d-js v3.1 事件分发机制
- 经常用到的代码段
- 算法之每日一题:找出无序数组中第k大的数字