`
bcyy
  • 浏览: 1832762 次
文章分类
社区版块
存档分类
最新评论

LeetCode Add Two Numbers两个链表数值相加

 
阅读更多

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

相当于无限加了,就是用了链表来存储数据。

本题就是考对链表的操作和模拟加法。

第一种方法:

这个跟合并两个有序链表成一个有序链表的程序结构是一样的。

ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
		int carry = 0;
		int sum = 0;
		ListNode *sumList = new ListNode(-1);
		ListNode *cur = sumList;
		int l1val, l2val;
		while (l1 && l2)
		{
			l1val = l1->val;
			l2val = l2->val;
			l1 = l1->next;
			l2 = l2->next;
			sum = carry + l1val + l2val;
			carry = sum/10;
			sum %= 10;
			cur->next = new ListNode(sum);
			cur = cur->next;
		}
		while (l1)
		{
			l1val = l1->val;
			l1 = l1->next;
			sum = carry + l1val;
			carry = sum/10;
			sum %= 10;
			cur->next = new ListNode(sum);
			cur = cur->next;
		}
		while (l2)
		{
			l1val = l2->val;
			l2 = l2->next;
			sum = carry + l1val;
			carry = sum/10;
			sum %= 10;
			cur->next = new ListNode(sum);
			cur = cur->next;
		}
		if (carry != 0)
		{
			cur->next = new ListNode(carry);
		}
		ListNode *t = sumList->next;
		delete sumList;
		return t;
	}


这样也许简洁一点,逻辑是差不多的,就是处理数据有点不一样。

ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
		ListNode *sumList = new ListNode(-1);
		ListNode *cur = sumList;

		int carry = 0;
		while (l1 != nullptr || l2 != nullptr || carry != 0) 
		{
			int l1val = l1 == nullptr ? 0 : l1->val;
			int l2val = l2 == nullptr ? 0 : l2->val;
			int sum = l1val + l2val + carry;
			carry = sum / 10;
			sum %= 10;

			cur->next = new ListNode(sum);
			cur = cur->next;

			l1 = l1 == nullptr ? nullptr : l1->next;
			l2 = l2 == nullptr ? nullptr : l2->next;
		}

		ListNode *t = sumList->next;
		delete sumList;
		return t;
	}


分享到:
评论

相关推荐

    leetcode add two numbers

    自己写的一个完整的程序,包括main函数,在VS上面提交通过,但是放到leetcode上面会出现问题;...解决的问题有:第一:两个链表的最后一个值相加后进位的问题;第二:两个链表的长度不一样长的问题。

    addTwoNumbers_leetcode_

    给你两个?非空 的链表,表示两个非负的整数。它们每位数字都是按照?逆序?的方式存储的,并且每个节点...请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0?开头。

    leetcode算法题-链表操作(两数相加)

    leetcode 算法题: 两数相加 ...链接:https://leetcode-cn.com/problems/add-two-numbers 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807 由题意可知,链表为逆

    leetcode2sumc-2021-LeetCode-02_Add_Two_Numbers:2021-LeetCode-02_Add_Two

    这是著名的反向链表问题的“相加两个数”的简单解决方案。 如果您愿意,请随时从我的 Github 存储库链接下载并修改 XCode Playground 文件 我会定期不断地解决尽可能多的问题,以保持每天的有趣。 我怀念上学的日子...

    LeetCode刷题笔记——#2. 两数相加

    难度:中等 一、题目描述: 二、解题分析:   根据题目这道题要注意两个点: 相加进位 两个链表长度不一定... def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode: newNode=ListNode(0) ansNode

    leetcode中文版-LeetCode:LeetcodeC++/Java

    leetcode中文版 LeetCode # Title Chinese Tag Solution 1 Two Sum 两数之和 array,hash 2 Add Two Numbers 两数相加 math 3 Longest Substring ...Two ...两个排序数组的中位数 ...two ...Two ...合并两个有序链表 lin

    leetcode中国-leetcode_python3:用Python3练习leetcode

    给出两个链表,相同位置的节点相加,如果满10则在下一个节点加1,类似两个数相加的操作。 A: 定义一个进位变量,如果两个节点相加大于10,则进位置为1,每次相加都是 节点1 + 节点2 + 进位数 通过节点遍历整个链表,...

    leetcode算法题主函数如何写-LeetCode:LeetCode程序

    leetcode算法题主函数如何写 ...1.首先同时遍历两个链表,对应位置的整数值相加,得到加和,如果加和小于10,则直接记录在新的加和链表中,如果加和大于等于10,则取个位数的值记录在新的加和链表中,

    刷leetcode不用stl-wx:leetcode刷题记录

    两个链表模拟加法,先用l3存储各位相加的值,再去计算进位,进位的过程中判断是否存在next ListNode,不存在则创建val为1的ListNode Longest Substring Without Repeating Characters 滑动窗口配合set集合,也可以将...

    leetcode双人赛-java_leetcode:java打印letcode

    leetcode双人赛 工程共分为两个文件夹: A.Alogrithm 算法导论视频、书的相关程序,用于学习算法及数据结构的基础知识 ...新建一个链表,同时向后遍历两个链表,将他们的value相加 Given a string, find the

    leetcode答案-code:学习

    如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 longest-substring-without-repeating-characters 给定一个字符串,请你找出其中不...

    lrucacheleetcode-LeetCode:LeetCode刷题

    两数相加(Add Two Numbers) 2018.9.25 翻转二叉树(Invert Binary Tree) 2018.9.25 环形链表(Linked List Cycle) 2018.9.25 环形链表 II(Linked List Cycle II) 2018.9.26 删除排序链表中的重复元素 II...

    leetcode下载-Leetcode:力码

    由于链表是逆置的,所以直接顺序遍历两个链表,按照加法器规则依次相加各节点,并进位 最后一组相加的进位如果为1,要记住加进结果里 为了计算上的统一, 可以把两个数组扩充到一样长 遍历完俩,再写两个循环遍历...

    javalruleetcode-leetcode100:LeetCode热题100Java实现

    java lru leetcode leetcode100 LeetCode热题100 Java实现 leetcode 热题100 [TOC] 难度中等4480 给出两个 ...的链表用来表示两个非负的整数。...addTwoNumbers(ListNode l1, ListNode l2) { ListNode

    java二叉树算法源码-algorithm-primer:algorithmprimer-算法基础、Leetcode编程和剑指offer,Ja

    java二叉树算法源码 algorithm-primer algorithm primer ...合并两个有序链表 Merge Two Sorted Lists Easy 141 判断链表是是否存在环 Linked List Cycle Easy 142 环形链表II Linked List Cycle I

    java猜字母游戏源码-leetcode:leetcode记录

    用链表存储的两个数相加,逐位相加,记得进位。。 003_Medium: Longest Substring Without Repeating Characters. 最长无重复字串。运用滑动窗口法,也可运行HashMap. 设置数组a(长度大于ASCII个数),ASCII第一位是'...

    acm和leetcode难度-leetcode:leetcode算法分析和代码实现

    两个数相加 [Add Two Numbers] ★☆☆☆☆ 链表 / 归并 3 没有重复字母的最长子串 [Longest Substring Without Repeating Characters] ★★☆☆☆ 字符串 / 判重 4 两个有序数组的中值 [Median of Two So

    leetcode答案-LeetCode:力码

    2.addTwoNumbers 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表...

    LeetCode去除数组重复元素-Arithmetic-Swift:一些算法的swift实现

    两数相加 2. Add Two Numbers 链表翻转 61. Rotate List 最大不同 318. Maximum Product of Word Lengths 【这个题目LTE 复杂度已经降下了】 最长不重复字符串3. Longest Substring Without Repeating Characters --...

    leetcode数组下标大于间距-LeetCode:力扣GoLang

    add-two-numbers:计算两个逆序链表数的和 计算两个逆序链表数的和 就是要实现一下进位, 主要是用链表实现大数相加, 最终返回的链表(head+cursor)也是逆序的, 最后要检查下有没有遗留进位. 3.M: longest-substring-...

Global site tag (gtag.js) - Google Analytics