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(ListNode* l1, ListNode* l2) {
        int len1=0,len2=0;
        vector<int> vec1,vec2;
        while(l1!=NULL){
            vec1.push_back(l1->val);
            len1++;
            l1=l1->next;
        }
        while(l2!=NULL){
            vec2.push_back(l2->val);
            len2++;
            l2=l2->next;
        }
        reverse(vec1.begin(),vec1.end());
        reverse(vec2.begin(),vec2.end());
        int jw=0;
        ListNode *l3=new ListNode(0),*p=new ListNode(0);
        p=l3;
        while(len1>0&&len2>0){
            int key=vec1[len1-1]+vec2[len2-1]+jw;
            if(key>=10){
                key-=10;
                jw=1;
            }else{
                jw=0;
            }
            ListNode *x=new ListNode(key);
            p->next=x;
            p=x;
            p->val=key;
            p->next=NULL;
            len1--,len2--;
        }
        if(len1>0){
            while(len1>0){
                int key=vec1[len1-1]+jw;
                if(key>=10){
                    key-=10;
                    jw=1;
                }else{
                    jw=0;
                }
                ListNode *x=new ListNode(key);
                p->next=x;
                p=x;
                p->val=key;
                p->next=NULL;
                len1--;
            }
        }
        if(len2>0){
            while(len2>0){
                int key=vec2[len2-1]+jw;
                if(key>=10){
                    key-=10;
                    jw=1;
                }else{
                    jw=0;
                }
                ListNode *x=new ListNode(key);
                p->next=x;
                p=x;
                p->val=key;
                p->next=NULL;
                len2--;
            }
        }
        if(jw==1){
            ListNode *x=new ListNode(jw);
            p->next=x;
            p=x;
            p->val=1;
            p->next=NULL;
        }
        return l3->next;
    }
};

原文地址:https://www.cnblogs.com/zzh1582188532/p/12158939.html

时间: 2024-11-07 15:55:56

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.2

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

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=

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

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

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 ->