Problem:

You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8

一开始就是想到先把第一个list转换成一个数,然后把第二个转换成第二个数,然后相加后,再把相加的值变成list。代码如下

ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
int a = , b = , ans = , flag = ;
int index1 = , index2 = ;
ListNode *temp1, *temp2, *result;
temp1 = l1;
temp2 = l2;
while(temp1->next != NULL )
{
index1++;
a += (temp1 -> next -> val) * (int)pow(,index1);
}
while(temp2 -> next != NULL)
{
index2++;
b += temp2 ->next -> val * (int)pow(, index2);
}
ans = a + b;
result -> val = ans%;
result -> next = NULL;
flag = ans/;
while(flag)
{
ListNode *added = new ListNode(flag%10);
result ->next = added;
flag = flag/;
}
return result;
}

然后是Time Limit Exceed了。那就不能这样做,应该直接在链表相加。加到某个链表结束为止。要用中间变量记住当前的进位。如果最后进位不为零(也就是为1)的话,那还是需要记录的。代码贴出如下:

class Solution {
public:
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2)
{
ListNode * ans = NULL, *last = NULL;
int up = ;
while (l1 != NULL && l2 != NULL)
{
int tmp = l1->val + l2->val + up;
up = tmp / ;
if (last == NULL)
{
ans = new ListNode(tmp % );
last = ans;
}
else
last = pushBack(last, tmp % );
l1 = l1->next;
l2 = l2->next;
}
while (l1 != NULL)
{
int tmp = l1->val + up;
last = pushBack(last, tmp % );
up = tmp / ;
l1 = l1->next;
}
while (l2 != NULL)
{
int tmp = l2->val + up;
last = pushBack(last, tmp % );
up = tmp / ;
l2 = l2->next;
}
if (up == )
{
ListNode * l = new ListNode(up);
last->next = l;
}
return ans;
} ListNode * pushBack(ListNode * last, int val)
{
ListNode * l = new ListNode(val);
last->next = l;
return l;
}
};

还是要感谢suool大神,改天一定要再做一次看看是不是真的掌握了。自己真的水平有限啊。不过只要肯努力,一天进步一点点就好。让cnblogs记录我的学习过程,come on!

最新文章

  1. 配置Entity Framework连接Sql Server出现的一个异常
  2. MSSQL 生成拼音码
  3. 动态修改 NodeJS 程序中的变量值
  4. 团体程序设计天梯赛-练习集L2-011. 玩转二叉树
  5. Android(java)学习笔记123:Clock app编写报错01
  6. KindEditor 修改多图片上传显示限制大小和张数
  7. 函数模板的载体-HPP
  8. Floodlight Controller 路线原则
  9. zabbix3.0.4 部署History
  10. CSS中浮动和定位对元素宽度/外边距/其他元素所占空间的影响
  11. How Many Sets I(容斥定理)
  12. FPGA学习笔记(四)——Verilog基本语法
  13. JavaScript如何计算两个日期间的时间差
  14. 浪里个浪 FZU - 2261
  15. POI操作Excel详解,读取xls和xlsx格式的文件
  16. macos 下安装virtualenv,virtualenvwrapper,然后在pycharm中正常配置方法日志
  17. Oracle取月份-不带前面的0
  18. MySQL 删除重复数据实例
  19. Linux内核分析 笔记四 系统调用的三个层次 ——by王玥
  20. 最小二乘法 及python 实现

热门文章

  1. STL源代码分析 集装箱 stl_set.h
  2. eclipse android ndk 提示Type 'JNIEnv' could not be resolved 等信息解决办法
  3. SAP RFC 函数来创建 Java呼叫 学习总结 一步一步的插图
  4. JMeter 怎么保存登录状态
  5. HDU ACM 1007 Quoit Design 分而治之的方法,最近点
  6. HTML文档中应用css样式的方法总结
  7. 最少换乘(Dijkstra)
  8. android activity 后的形式 藏
  9. 【Linux】Vim编辑器-批量注释与反注释
  10. 【翻译自mos文章】v$undostat视图没有依照每10分钟进行更新,v$undostat仅仅有1行(one rows)