leetcode刷题: 002 Add Two Numbers
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
首先使用链表实现等长无进位的求和,即实现 (1 —> 2 -> 3) + (1 -> 2 -> 3)=(2 -> 3 -> 6)
 #include <iostream>
 using namespace std;
 struct ListNode {
      int val;
      ListNode *next;
      ListNode(int x) : val(x), next(NULL) {}
 };
 class Solution {
 public:
     ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
         int val1 = , val2 = ;
         ListNode *l = NULL;
         ListNode *l_end = NULL;
         ListNode *l_new = NULL;
         val1 = l1->val;
         val2 = l2->val;
         l1 = l1->next;
         l2 = l2->next;
         l_new = (ListNode *)new ListNode((val1 + val2) % );
         l_new->next = NULL;
         l = l_new;
         l_end = l;
         while (l1 != NULL || l2 != NULL){
                 val1 = l1->val;
                 val2 = l2->val;
                 l1 = l1->next;
                 l2 = l2->next;
             l_new = (ListNode *)new ListNode((val1 + val2)%);
             l_new->next = NULL;
             l_end->next = l_new;
             l_end = l_new;
         }
         return l;
     }
 };
 int main()
 {
     ListNode *l1, *l2;
     ListNode *l;
     l1 = (ListNode *)new ListNode();
     l2 = (ListNode *)new ListNode();
     l1->next = (ListNode *)new ListNode();
     l2->next = (ListNode *)new ListNode();
     l1->next->next = (ListNode *)new ListNode();
     l2->next->next = (ListNode *)new ListNode();
     Solution s;
     l = s.addTwoNumbers(l1, l2);
     while (l != NULL){
         cout << l->val << endl;
         l = l->next;
     }
     while ();
 }
运行结果:
然后实现不等长无进位的求和,即实现 (1 —> 2 -> 3) + (1)=(2 -> 2 -> 3)
 #include <iostream>
 using namespace std;
 struct ListNode {
      int val;
      ListNode *next;
      ListNode(int x) : val(x), next(NULL) {}
 };
 class Solution {
 public:
     ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
         int val1 = , val2 = ;
         ListNode *l = NULL;
         ListNode *l_end = NULL;
         ListNode *l_new = NULL;
         val1 = l1->val;
         val2 = l2->val;
         l1 = l1->next;
         l2 = l2->next;
         l_new = (ListNode *)new ListNode((val1 + val2) % );
         l_new->next = NULL;
         l = l_new;
         l_end = l;
         while (l1 != NULL || l2 != NULL){
             if (l1 == NULL){
                 val2 = l2->val;
                 l2 = l2->next;
                 val1 = ;
             }
             else if (l2 == NULL){
                 val1 = l1->val;
                 l1 = l1->next;
                 val2 = ;
             }
             else{
                 val1 = l1->val;
                 val2 = l2->val;
                 l1 = l1->next;
                 l2 = l2->next;
             }
             l_new = (ListNode *)new ListNode((val1 + val2)%);
             l_new->next = NULL;
             l_end->next = l_new;
             l_end = l_new;
         }
         return l;
     }
 };
 int main()
 {
     ListNode *l1, *l2;
     ListNode *l;
     l1 = (ListNode *)new ListNode();
     l2 = (ListNode *)new ListNode();
     l1->next = (ListNode *)new ListNode();
     //l2->next = (ListNode *)new ListNode(2);
     l1->next->next = (ListNode *)new ListNode();
     //l2->next->next = (ListNode *)new ListNode(3);
     Solution s;
     l = s.addTwoNumbers(l1, l2);
     while (l != NULL){
         cout << l->val << endl;
         l = l->next;
     }
     while ();
 }
运行结果:
最后实现不等长有进位的求和,即实现题目要求(注意最后一位有进位的情况)
 #include <iostream>
 using namespace std;
 struct ListNode {
      int val;
      ListNode *next;
      ListNode(int x) : val(x), next(NULL) {}
 };
 class Solution {
 public:
     ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
         int val1 = , val2 = , carry = ;
         ListNode *l = NULL;
         ListNode *l_end = NULL;
         ListNode *l_new = NULL;
         val1 = l1->val;
         val2 = l2->val;
         l1 = l1->next;
         l2 = l2->next;
         l_new = (ListNode *)new ListNode((val1 + val2 + carry) % );
         l_new->next = NULL;
         l = l_new;
         carry = (val1 + val2 + carry) / ;
         l_end = l;
         while (l1 != NULL || l2 != NULL){
             if (l1 == NULL){
                 val2 = l2->val;
                 l2 = l2->next;
                 val1 = ;
             }
             else if (l2 == NULL){
                 val1 = l1->val;
                 l1 = l1->next;
                 val2 = ;
             }
             else{
                 val1 = l1->val;
                 val2 = l2->val;
                 l1 = l1->next;
                 l2 = l2->next;
             }
             l_new = (ListNode *)new ListNode((val1 + val2 + carry)%);
             l_new->next = NULL;
             carry = (val1 + val2 + carry) / ;
             l_end->next = l_new;
             l_end = l_new;
         }
         if (carry != ){
             l_new = (ListNode *)new ListNode(carry);
             l_new->next = NULL;
             l_end->next = l_new;
             l_end = l_new;
         }
         return l;
     }
 };
 int main()
 {
     ListNode *l1, *l2;
     ListNode *l;
     l1 = (ListNode *)new ListNode();
     l2 = (ListNode *)new ListNode();
     l1->next = (ListNode *)new ListNode();
     l2->next = (ListNode *)new ListNode();
     l1->next->next = (ListNode *)new ListNode();
     l2->next->next = (ListNode *)new ListNode();
     Solution s;
     l = s.addTwoNumbers(l1, l2);
     while (l != NULL){
         cout << l->val << endl;
         l = l->next;
     }
     while ();
 }
运行结果:
因为是一边学C++,一边刷leetcode,所以有什么问题,十分感谢您能指点。
leetcode刷题: 002 Add Two Numbers的更多相关文章
- LeetCode刷题系列——Add Two Numbers
		
题目链接 这个题目很简单,归并而已,好久没练编程,居然忘了在使用自定义类型前,要进行初始化(new操作). class ListNode{ int val; ListNode next; ListNo ...
 - LeetCode第二题:Add Two Numbers
		
You are given two non-empty linked lists representing two non-negative integers. The digits are stor ...
 - 刷题2. Add Two Numbers
		
一.题目要求 You are given two non-empty linked lists representing two non-negative integers. The digits a ...
 - LeetCode刷题笔录Add Binary
		
Given two binary strings, return their sum (also a binary string). For example, a = "11" b ...
 - C#LeetCode刷题-数学
		
数学篇 # 题名 刷题 通过率 难度 2 两数相加 29.0% 中等 7 反转整数 C#LeetCode刷题之#7-反转整数(Reverse Integer) 28.6% 简单 8 字符串转整数 ...
 - LeetCode刷题指南(字符串)
		
作者:CYC2018 文章链接:https://github.com/CyC2018/CS-Notes/blob/master/docs/notes/Leetcode+%E9%A2%98%E8%A7% ...
 - LeetCode刷题总结-数组篇(上)
		
数组是算法中最常用的一种数据结构,也是面试中最常考的考点.在LeetCode题库中,标记为数组类型的习题到目前为止,已累计到了202题.然而,这202道习题并不是每道题只标记为数组一个考点,大部分习题 ...
 - LeetCode刷题总结-数组篇(中)
		
本文接着上一篇文章<LeetCode刷题总结-数组篇(上)>,继续讲第二个常考问题:矩阵问题. 矩阵也可以称为二维数组.在LeetCode相关习题中,作者总结发现主要考点有:矩阵元素的遍历 ...
 - LeetCode刷题总结-数组篇(下)
		
本期讲O(n)类型问题,共14题.3道简单题,9道中等题,2道困难题.数组篇共归纳总结了50题,本篇是数组篇的最后一篇.其他三个篇章可参考: LeetCode刷题总结-数组篇(上),子数组问题(共17 ...
 - LeetCode刷题总结-树篇(上)
		
引子:刷题的过程可能是枯燥的,但程序员们的日常确不乏趣味.分享一则LeetCode上名为<打家劫舍 |||>题目的评论: 如有兴趣可以从此题为起点,去LeetCode开启刷题之 ...
 
随机推荐
- JS中的 变量提升
			
首先纠正下,文章标题里的 “变量提升” 名词是随大流叫法,“变量提升” 改为 “标识符提升” 更准确.因为变量一般指使用 var 声明的标识符,JS 里使用 function 声明的标识符也存在提升( ...
 - LInux内核分析——计算机是如何工作的进行
			
万子惠 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 " 实 ...
 - High Precision Timers in iOS / OS X
			
High Precision Timers in iOS / OS X The note will cover the do's and dont's of using high precision ...
 - LPTHW 笨方法学python 19章
			
本章节,我只是把所有的输出加上了自己的注释. #!/usr/bin/env python # -*- coding:utf-8 -*- def cheese_and_crakers(cheese_co ...
 - 为sproto添加python绑定
			
项目地址:https://github.com/spin6lock/python-sproto 第一次写Python的C扩展,留点笔记记录一下.主要的参考文档是:Extending Python wi ...
 - 关于Task类
			
private static void tt2() { Task task = null; ; i < ; i++) { task = Task.Factory.StartNew(callbac ...
 - #MySQL for Python(MySQLdb) Note
			
#MySQL for Python(MySQLdb) Note #切记不要在python中创建表,只做增删改查即可. #步骤:(0)引用库 -->(1)创建连接 -->(2)创建游标 -- ...
 - Fragment使用findFragmentById返回null
			
@Override public void onClick(View v) { switch (v.getId()){ case R.id.btn1: replaceFragment(new Anot ...
 - js中的this指针(二)
			
在 js 中声明并定义一个函数后,除了定义时传入的形式参数,函数还会接收到 2 个附加的参数:this 和 arguments. this 指针的值取决于调用时的模式. 当这个函数被保存为对象的一个属 ...
 - SocketTcpClient
			
public class SocketTcpClient { public static string ErrorMsg = string.Empty; private static Socket _ ...