You are given two non-empty linked lists representing two non-negative integers. 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.

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

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

解答

寒假刷的第一题……

相当于是实现一个全加器阵列……大概是还没有走出数逻的阴影……

当然局部变量要记得初始化,将Carry变量赋值为0,这样链表头节点的相加就可以归入链表中一般节点的相加,将Ans赋值为NULL,为循环中链表的插入做准备,每一位都要加上前一位Carry的值并重新计算Carry,第一位的前一位Carry的值是0,最后一位相加也要重新计算Carry,并且如果两个链表长度不同,程序进行到后面只对一个链表进行计算时,每一位也要加上前一位Carry的值并重新计算Carry,因为可能存在9+999999的情况,其实这样的情况也就相当于是一个全加器单元的一个加数是0,并且最后一位相加结束后Carry不为0,则要再增加一位。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
    struct ListNode *Ans, *TempNode, *TailNode;
    int Carry;

    Carry = ;
    Ans = TailNode = NULL;
    while(NULL != l1 && NULL != l2){
        TempNode = (struct ListNode*)malloc(sizeof(struct ListNode));
        TempNode->val = (Carry + l1->val + l2->val) % ;
        TempNode->next = NULL;
        Carry = (Carry + l1->val + l2->val) / ;
        if(NULL == Ans){
            Ans = TempNode;
            TailNode = TempNode;
        }
        else{
            TailNode->next = TempNode;
            TailNode = TailNode->next;
        }
        l1 = l1->next;
        l2 = l2->next;
    }
    while(NULL != l1){
        TempNode = (struct ListNode*)malloc(sizeof(struct ListNode));
        TempNode->val = (Carry + l1->val) % ;
        TempNode->next = NULL;
        Carry = (Carry + l1->val) / ;
        TailNode->next = TempNode;
        TailNode = TailNode->next;
        l1 = l1->next;
    }
    while(NULL != l2){
        TempNode = (struct ListNode*)malloc(sizeof(struct ListNode));
        TempNode->val = (Carry + l2->val) % ;
        TempNode->next = NULL;
        Carry = (Carry + l2->val) / ;
        TailNode->next = TempNode;
        TailNode = TailNode->next;
        l2 = l2->next;
    }
     != Carry){
        TempNode = (struct ListNode*)malloc(sizeof(struct ListNode));
        TempNode->val = Carry;
        TempNode->next = NULL;
        TailNode->next = TempNode;
    }

    return Ans;
}

LeetCode OJ 2. Add Two Numbers的更多相关文章

  1. 【LeetCode OJ】Add Two Numbers

    题目:You are given two linked lists representing two non-negative numbers. The digits are stored in re ...

  2. LeetCode OJ:Add Two Numbers (相加链表之数)

    You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...

  3. leetcode 第二题Add Two Numbers java

    链接:http://leetcode.com/onlinejudge Add Two Numbers You are given two linked lists representing two n ...

  4. 【LeetCode】445. Add Two Numbers II 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 先求和再构成列表 使用栈保存节点数字 类似题目 日期 ...

  5. 《LeetBook》LeetCode题解(2):Add Two Numbers [M]

    我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...

  6. C# 写 LeetCode Medium #2 Add Two Numbers

    2. Add Two Numbers You are given two non-empty linked lists representing two non-negative integers. ...

  7. LeetCode 第二题 Add Two Numbers 大整数加法 高精度加法 链表

    题意 You are given two non-empty linked lists representing two non-negative integers. The digits are s ...

  8. leetcode@ [2/43] Add Two Numbers / Multiply Strings(大整数运算)

    https://leetcode.com/problems/multiply-strings/ Given two numbers represented as strings, return mul ...

  9. 【一天一道leetcode】 #2 Add Two Numbers

    一天一道leetcode系列 (一)题目: You are given two linked lists representing two non-negative numbers. The digi ...

随机推荐

  1. 02-Sockent客户端

    package com.day1; import java.io.IOException; import java.io.OutputStream; import java.net.Inet4Addr ...

  2. 第8课 列表初始化(3)_防止类型收窄、explicit关键字

    1. 防止类型收窄 (1)类型收窄:指的是导致数据内容发生变化或者精度丢失的隐式类型转换. (2)类型收窄的几种情况: ①从浮点数隐式转换为整型数,如int i=2.2; ②从高精度浮点数隐式转换为低 ...

  3. python hashillb 模块

    hashlib主要提供字符加密功能,将md5和sha模块整合到了一起,支持md5,sha1, sha224, sha256, sha384, sha512等算法 import hashlib # ## ...

  4. C# WPF 进度条,根据读取数据显示进度条进度,根据Excel文件读取数据,进度条样式

    后台代码: //导入 private void Border_MouseLeftButtonUp_2(object sender, MouseButtonEventArgs e) { var path ...

  5. Linux NTP

    1.Server 2.QuickStart last 1.Server 0.cn.pool.ntp.org 1.cn.pool.ntp.org 2.cn.pool.ntp.org 3.cn.pool. ...

  6. android 实现一个简单纯文本的ListView

    思维线路: 1.创建一个ListViewActivity,LinearLayout布局里写了一个ListView布局 2.创建一个TextView布局给ArrayAdapter适配器使用 3.将Tex ...

  7. Ubuntu 14.04 配置OpenCv 2.4.9

      安装工具 g++ 链接:http://www.cnblogs.com/LQLin168/p/6844593.html 下载OpenCv 2.4.9(官网地址):http://opencv.org/ ...

  8. 【HQL】窗口函数

    LAG LAG(col,n,DEFAULT) :与lead相反,用于统计窗口内往上第n行值.第一个参数为列名,第二个参数为往上第n行(可选,默认为1),第三个参数为默认值(当往上第n行为NULL时候, ...

  9. 【powerBI】power pivot添加参数表

    背景 最近在做应用分析,爬了几个应用市场的排行榜,需要分析前多少名各个品类的app有多少个.数据量不大,excel就能做分析,所以想起来pivot的参数表功能.这个功能还是比较实用的,在这再做个记录, ...

  10. [多线程]wait和notify

    线程之间的通信   使用wait/notify方法实现线程间的通信.这两个方法都是Object类的方法,也就是说Java所有的对象都提供这两个方法.1.wait和notify必须配合synchroni ...