zoukankan      html  css  js  c++  java
  • 【leetcode】 算法题2 两数相加

     
    问题
      
      

    给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。

    你可以假设除了数字 0 之外,这两个数字都不会以零开头。

    示例:

    输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
    输出:7 -> 0 -> 8
    原因:342 + 465 = 807
     
    代码实现
       
     
    #include <vector>
    #include <map>
    #include <iostream>
    #include <math.h>
    /**
    *
    给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。
    
    你可以假设除了数字 0 之外,这两个数字都不会以零开头。
    
    示例:
    
    输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
    输出:7 -> 0 -> 8
    原因:342 + 465 = 807
    */
    using namespace std;
    
    struct ListNode{
        int val;
        ListNode *next;
        ListNode(int x) : val(x), next(NULL){}
    };
    
    template<class T>
    int length(T& arr) {
        return sizeof(arr)/ sizeof(arr[0]);
    }
    
    class Solution {
    public:
        ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
            uint64_t carry = 0, sum = 0;
            ListNode prehead(0), *p = &prehead;
    
            while (l1 || l2) {
                sum =  (l1 ? l1->val : 0) + (l2 ? l2->val : 0) + carry;
                sum = carry / 10;
                p->next  = new ListNode(sum % 10);
    
                l1 = l1 ? l1->next : l1;
                l2 = l2 ? l2->next : l2;
                p = p->next;
            }
            return prehead.next;
        }
    };
    
    int main(int argc, char** argv){
        int a[] = {2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,9};
        ListNode* tmp = new ListNode(0);
        ListNode* ptr1 = tmp;
        for (int i = 0; i < length(a); i++) {
            ptr1->next = new ListNode(a[i]);
            ptr1 = ptr1->next;
        }
        ptr1 = tmp->next;
        delete tmp;
    
        tmp = new ListNode(0);
        int b[] = {5,6,4,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,2,4,3,9,9,9,9};
        ListNode* ptr2 = tmp;
        for (int j = 0; j < length(b); j ++) {
            ptr2->next = new ListNode(b[j]);
            ptr2 = ptr2->next;
        }
        ptr2 = tmp->next;
        delete tmp;
    
        Solution* solution = new Solution();
        solution->addTwoNumbers(ptr1, ptr2);
        delete solution;
        return 0;
    }
    

      

     
    推荐
     
     
     
     
     
     
  • 相关阅读:
    Linux0.11之初识Makefile/build.c
    主机(windows10)虚拟机(ubuntu18)arm板(linux3.4)相互ping通
    windows上利用dhcpsrv搭建DHCP服务器
    《剑指offer》面试题27 二叉搜索树与双向链表 Java版
    《剑指offer》面试题26 复杂链表的复制 Java版
    《剑指offer》面试题25 二叉树中和为某一值的路径 Java版
    《剑指offer》面试题24 二叉搜索树的后序遍历序列 Java版
    异常处理
    三元表达式、列表推导式、生成器表达式、匿名函数、内置函数、递归调用与二分法的简单认识
    迭代器与生成器
  • 原文地址:https://www.cnblogs.com/baochuan/p/9019483.html
Copyright © 2011-2022 走看看