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;
}
分享到:
相关推荐
自己写的一个完整的程序,包括main函数,在VS上面提交通过,但是放到leetcode上面会出现问题;...解决的问题有:第一:两个链表的最后一个值相加后进位的问题;第二:两个链表的长度不一样长的问题。
给你两个?非空 的链表,表示两个非负的整数。它们每位数字都是按照?逆序?的方式存储的,并且每个节点...请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0?开头。
leetcode 算法题: 两数相加 ...链接:https://leetcode-cn.com/problems/add-two-numbers 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807 由题意可知,链表为逆
这是著名的反向链表问题的“相加两个数”的简单解决方案。 如果您愿意,请随时从我的 Github 存储库链接下载并修改 XCode Playground 文件 我会定期不断地解决尽可能多的问题,以保持每天的有趣。 我怀念上学的日子...
难度:中等 一、题目描述: 二、解题分析: 根据题目这道题要注意两个点: 相加进位 两个链表长度不一定... def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode: newNode=ListNode(0) ansNode
leetcode中文版 LeetCode # Title Chinese Tag Solution 1 Two Sum 两数之和 array,hash 2 Add Two Numbers 两数相加 math 3 Longest Substring ...Two ...两个排序数组的中位数 ...two ...Two ...合并两个有序链表 lin
给出两个链表,相同位置的节点相加,如果满10则在下一个节点加1,类似两个数相加的操作。 A: 定义一个进位变量,如果两个节点相加大于10,则进位置为1,每次相加都是 节点1 + 节点2 + 进位数 通过节点遍历整个链表,...
leetcode算法题主函数如何写 ...1.首先同时遍历两个链表,对应位置的整数值相加,得到加和,如果加和小于10,则直接记录在新的加和链表中,如果加和大于等于10,则取个位数的值记录在新的加和链表中,
两个链表模拟加法,先用l3存储各位相加的值,再去计算进位,进位的过程中判断是否存在next ListNode,不存在则创建val为1的ListNode Longest Substring Without Repeating Characters 滑动窗口配合set集合,也可以将...
leetcode双人赛 工程共分为两个文件夹: A.Alogrithm 算法导论视频、书的相关程序,用于学习算法及数据结构的基础知识 ...新建一个链表,同时向后遍历两个链表,将他们的value相加 Given a string, find the
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 longest-substring-without-repeating-characters 给定一个字符串,请你找出其中不...
两数相加(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...
由于链表是逆置的,所以直接顺序遍历两个链表,按照加法器规则依次相加各节点,并进位 最后一组相加的进位如果为1,要记住加进结果里 为了计算上的统一, 可以把两个数组扩充到一样长 遍历完俩,再写两个循环遍历...
java lru leetcode leetcode100 LeetCode热题100 Java实现 leetcode 热题100 [TOC] 难度中等4480 给出两个 ...的链表用来表示两个非负的整数。...addTwoNumbers(ListNode l1, ListNode l2) { ListNode
java二叉树算法源码 algorithm-primer algorithm primer ...合并两个有序链表 Merge Two Sorted Lists Easy 141 判断链表是是否存在环 Linked List Cycle Easy 142 环形链表II Linked List Cycle I
用链表存储的两个数相加,逐位相加,记得进位。。 003_Medium: Longest Substring Without Repeating Characters. 最长无重复字串。运用滑动窗口法,也可运行HashMap. 设置数组a(长度大于ASCII个数),ASCII第一位是'...
两个数相加 [Add Two Numbers] ★☆☆☆☆ 链表 / 归并 3 没有重复字母的最长子串 [Longest Substring Without Repeating Characters] ★★☆☆☆ 字符串 / 判重 4 两个有序数组的中值 [Median of Two So
2.addTwoNumbers 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表...
两数相加 2. Add Two Numbers 链表翻转 61. Rotate List 最大不同 318. Maximum Product of Word Lengths 【这个题目LTE 复杂度已经降下了】 最长不重复字符串3. Longest Substring Without Repeating Characters --...
add-two-numbers:计算两个逆序链表数的和 计算两个逆序链表数的和 就是要实现一下进位, 主要是用链表实现大数相加, 最终返回的链表(head+cursor)也是逆序的, 最后要检查下有没有遗留进位. 3.M: longest-substring-...