leetcode两数相加

题目描述很清楚,最容易想到的就是从前往后一次相加即可。

题中所给的数据结构描述:

第一次的算法:

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode res=new ListNode(0);
        ListNode cur=res;
        int      flag = 0;
        while(l1!=null&&l2!=null)
        {
            cur.val=l1.val+l2.val+flag;
            flag=cur.val/10;
            cur.val=cur.val%10;
            cur.next = new ListNode(0);
            cur=cur.next;
            l1=l1.next;
            l2=l2.next;
        }
        while(l1!=null)
        {
            cur.val=l1.val+flag;
            flag=cur.val/10;
            cur.val=cur.val%10;
            cur.next = new ListNode(0);
            cur=cur.next;
            l1=l1.next;
        }
        while(l2!=null){
            cur.val=l2.val+flag;
            flag=cur.val/10;
            cur.val=cur.val%10;
            cur.next = new ListNode(0);
            cur=cur.next;
            l2=l2.next;
        }
        return res ;
    }
}

其中flag为保存是否进位,初始为0。

第一次运行的结果:

与结果多了一个0,原因在于当节点在最后一个时,也会生成新的节点,所以会多出一个0。同时上述代码还没有考虑到最后一位如果产生进位的情况。所以,我们需要一个新的节点保存最后一个节点的前一个节点。

修改后的代码:

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode res=new ListNode(0);
        ListNode cur=res;
        ListNode pre=null;
        int      flag = 0;
        while(l1!=null&&l2!=null)
        {
            cur.val=l1.val+l2.val+flag;
            flag=cur.val/10;
            cur.val=cur.val%10;
            cur.next = new ListNode(0);
            pre=cur;
            cur=cur.next;
            l1=l1.next;
            l2=l2.next;
        }
        while(l1!=null)
        {
            cur.val=l1.val+flag;
            flag=cur.val/10;
            cur.val=cur.val%10;
            cur.next = new ListNode(0);
            pre=cur;
            cur=cur.next;
            l1=l1.next;
        }
        while(l2!=null){
            cur.val=l2.val+flag;
            flag=cur.val/10;
            cur.val=cur.val%10;
            cur.next = new ListNode(0);
            pre=cur;
            cur=cur.next;
            l2=l2.next;
        }

        if(flag==0)
        {
           pre.next=null;
        }else
        {
            cur.val=flag;
        }

        return res ;
    }
}

结果:

原文地址:https://www.cnblogs.com/stive-night/p/12292783.html

时间: 2024-10-31 15:01:04

leetcode两数相加的相关文章

LeetCode 两数相加

LeetCode 两数相加 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和. 您可以假设除了数字 0 之外,这两个数都不会以 0 开头. 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807 知识点: strrev(); // 实现字符

LeetCode - 两数相加(No.2)

2 - 两数相加 date : Dec.28th, 2019 platform : windows thinking raw method for problem solving. code /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* addTwoNumbers(struct ListNode* l

Leetcode 两数相加(链表)

https://leetcode-cn.com/problems/add-two-numbers/ 代码如下: /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* addTwoNumbers(ListN

【LeetCode】- Two Sum(两数相加)

[ 问题: ] Given an array of integers, find two numbers such that they add up to a specific target number. The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2. Please no

Leetcode 002.两数相加

1.题目描述 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和. 您可以假设除了数字 0 之外,这两个数都不会以 0 开头. 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807 2.易理解版本 2.1 解题思路 题中链表顺序正好是低

LeetCode 第2题 两数相加

/* T2:两数相加 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和. 您可以假设除了数字 0 之外,这两个数都不会以 0 开头. 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807*/ /** * Definition for

LeetCode之 两数相加

本内容为LeetCode第二道题目:两数相加 # -*- coding: utf-8 -*- """ Created on Sun Mar 10 10:47:12 2019 @author: Administrator 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和. 您可以假设除了数字 0 之外,这两个数都不会以 0 开头

LeetCode 445. 两数相加 II(Add Two Numbers II)

445. 两数相加 II 445. Add Two Numbers II 题目描述 给定两个非空链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储单个数字.将这两数相加会返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 进阶: 如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转. LeetCode445. Add Two Numbers II中等 示例: 输入: (7 -> 2 -> 4 -> 3) + (5 ->

Leetcode算法系列(链表)之两数相加

Leetcode算法系列(链表)之两数相加 难度:中等给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字.如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和.您可以假设除了数字 0 之外,这两个数都不会以 0 开头.示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807 链接:https://le