剑指 Offer II 025. 链表中的两数相加
创始人
2024-06-01 02:54:53

题目链接

剑指 Offer II 025. 链表中的两数相加 mid

题目描述

给定两个 非空链表 l1l2来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。

可以假设除了数字 0之外,这两个数字都不会以零开头。

示例1:

在这里插入图片描述

输入:l1 = [7,2,4,3], l2 = [5,6,4]
输出:[7,8,0,7]

示例2:

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[8,0,7]

示例3:

输入:l1 = [0], l2 = [0]
输出:[0]

提示:

  • 链表的长度范围为 [1,100][1, 100][1,100]
  • 0<=node.val<=90 <= node.val <= 90<=node.val<=9
  • 输入数据保证链表代表的数字无前导 0

解法一:反正链表 模拟加法

如图,以下两个链表做加法 [7 , 2 , 4 , 3][5 , 6 , 4]

在这里插入图片描述

我们一般模拟加法都是 从最低位 开始相加,也就是需要把链表倒过来。

在这里插入图片描述

模拟加法。

在这里插入图片描述
最后再将结果链表反转过来,就是答案 [ 7 , 8 , 0 , 7]

在这里插入图片描述

链表如何反转

时间复杂度: O(n)O(n)O(n)

代码:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* reverse(ListNode* head){ListNode *cur = head , *pre = nullptr;while(cur != nullptr){ListNode* nextNode = cur->next;cur->next = pre;pre = cur;cur = nextNode;}return pre;}ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {ListNode *a = reverse(l1) , *b = reverse(l2);ListNode* dummy = new ListNode(-1);ListNode* pre = dummy;int ca = 0;while(a != nullptr || b != nullptr || ca){int sum = ca;if(a != nullptr){sum += a->val;a = a->next;}if(b != nullptr){sum += b->val;b = b->next;}ListNode *node = new ListNode(sum%10);pre->next = node;pre = node;ca = sum / 10;}return reverse(dummy->next);}
};

解法二:栈 模拟加法

又有题目要求 我们不能改变原链表的结构。所以,我们可以用两个 栈stack来分别存储两个链表的节点值,接着再来模拟加法。

时间复杂度: O(n)O(n)O(n)

代码:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* reverse(ListNode *head){ListNode *pre = nullptr;ListNode *cur = head;while(cur){ListNode *nextNode = cur->next;cur->next = pre;pre = cur;cur = nextNode;}return pre;}ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {stack a,b;while(l1 != nullptr){a.push(l1->val);l1 = l1->next;}while(l2 != nullptr){b.push(l2->val);l2 = l2->next;}ListNode *dummy = new ListNode(-1);ListNode *pre = dummy;int ca = 0;while(!a.empty() || !b.empty() || ca){int sum = ca;if(!a.empty()){sum += a.top();a.pop();}if(!b.empty()){sum += b.top();b.pop();}ListNode *node = new ListNode(sum % 10);pre->next = node;pre = node;ca = sum / 10;}return reverse(dummy->next);}
};

相关内容

热门资讯

应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
怎么样的桃花 桃花近看远看的样... 今年的“三八”妇女节,阳光明媚,踏青赏花正当时。遂与姐妹们共赴十里蓝山,与花海来一场春天的约会。十里...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...