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

将两个链表上的数相加就可以,大于10进一位,注意下相加时候的细节就可以了,我这里

吧prev节点记录下来,这样最后多生成节点的时候便于将最后一个多余的节点删除:

 /**
* 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 * curr = new ListNode();
ListNode * root = curr;
ListNode * prev = curr;
int currVal = ;
while(l1 != NULL && l2 != NULL){
currVal = l1->val + l2->val;
curr->val += currVal;
curr->next = new ListNode(curr->val/);
curr->val%=;
prev = curr;
curr = curr->next;
l1 = l1->next;
l2 = l2->next;
}
while(l1 != NULL){
curr->val += l1->val;
curr->next = new ListNode(curr->val/);
curr->val %= ;
prev = curr;
curr = curr->next;
l1 = l1->next;
}
while(l2 != NULL){
curr->val += l2->val;
curr->next = new ListNode(curr->val/);
curr->val %= ;
prev = curr;
curr = curr->next;
l2 = l2->next;
}
if(curr->val == ){
prev->next = NULL;
delete curr;
}
return root;
}
};

感觉写的有点麻烦,应该有很多的重复代码可以改正,但是我暂时找不出来了,先这样吧。

更新下,以前脑子抽了写出了那样的代码。 其实三个while循环都可以放到一个while中, 下面用java在写一起,方法还是类似的:

 /**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode tmp = new ListNode(0);
ListNode head = tmp;
int carry = 0;
while(l1!=null || l2!=null || carry != 0){
int val = ((l1 != null)?l1.val:0) + ((l2!=null)?l2.val:0) + carry;
carry = carry/10 + val/10;
val %= 10;
tmp.next = new ListNode(val);
tmp = tmp.next;
l1 = l1!=null ? l1.next : l1;
l2 = l2!=null ? l2.next : l2;
}
return head.next;
}
}

最新文章

  1. iOS 播放GIF动态图片!!!!!
  2. junit 使用
  3. php常见知识
  4. paper 111:图像分类物体目标检测 from RCNN to YOLO
  5. 随机打乱工具sklearn.utils.shuffle,将原有的序列打乱,返回一个全新的错乱顺序的值
  6. 007.Compiled
  7. #Leet Code# Binary Tree Max[待精简]
  8. window.showModalDialog刷新父窗口和本窗口的方法及注意
  9. 《Head First 设计模式》学习笔记——状态模式
  10. Keywords Search (ac 自己主动机)
  11. UVa11555 - Aspen Avenue
  12. dotnetcore 自动迁移工具
  13. 【转】Spring总结以及在面试中的一些问题
  14. C语言练习题库----数组
  15. 使用CollectionViewSource,通过Xaml绑定自动排序
  16. select函数用法详解
  17. MySQL从删库到跑路_高级(一)——数据完整性
  18. C#学习笔记(十五):抽象方法、抽象类、多态和接口
  19. 线上服务内存OOM问题定位[转自58沈剑]
  20. Entity Framework7 入门之全功能.NET(Console, WinForms, WPF等)使用EF7

热门文章

  1. action接收请求参数
  2. SVN入门-2分钟教你入门
  3. 基本数据类型(Day4)
  4. begoo——对象的CRUD操作
  5. 转:[NHibernate]视图处理
  6. struts2基础——需要注意的几点
  7. 利用TokyoTyrant构建兼容Memcached协议、支持故障转移、高并发的分布式Key-value持久存储系统(转)
  8. Linux x86架构下ACPI PNP Hardware ID的识别机制
  9. Python3.x:pyodbc调用sybase的存储过程
  10. BeatSaber节奏光剑插件开发官方教程1-创建一个插件模板