反转链表与链表实现两数相加(简单思路)
1.反转链表(leetcode206)
题目描述:
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
迭代实现
:
思路:
创建两个结点,重复让后一个结点指向前一个结点,直到后一个结点的后继结点为空(由于反转链表,原来的头结点变为尾结点,所以要让头结点的next为空)
代码:
class Solution {public:ListNode* reverseList(ListNode* head) {if(!head ||!head->next) return head;auto p = head,q = p->next;while(q){auto o = q->next;q->next = p;p = q,q = o;}head->next = nullptr;return p;}
};
执行状态:
递归实现
:
思路:
编写该问题递归代码必须要有出口,即 if(condition) return 变量;这条语句,要实现的目的是让最后一个结点的后继结点指向它本身,而它自己的next指向空
class Solution {public:ListNode* reverseList(ListNode* head) {if(!head || !head->next) return head;auto res = reverseList(head->next);head->next->next = head;head->next = nullptr;return res;}};
执行状态:
通过对比两种方法的执行状态,可以发现递归反转链表时空性能更好,效率更高。
2.链表实现两数相加(leetcode2):
题目描述:
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例 1:
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
示例 2:
输入:l1 = [0], l2 = [0]
输出:[0]
示例 3:
输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]
提示:
每个链表中的节点数在范围 [1, 100] 内
0 <= Node.val <= 9
题目数据保证列表表示的数字不含前导零
模拟加法
思路:
由于输入的两个链表都是逆序存储数字的位数的,因此两个链表中同一位置的数字可以直接相加。我们同时遍历两个链表,逐位计算它们的和,并与当前位置的进位值相加。如果链表遍历结束后,carry>0,还需要在答案链表的后面附加一个节点,节点的值为carry。
代码:
class Solution {public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {ListNode *head = nullptr, *tail = nullptr;int carry = 0;while (l1 || l2) {int n1 = l1 ? l1->val: 0;int n2 = l2 ? l2->val: 0;int sum = n1 + n2 + carry;if (!head) {head = tail = new ListNode(sum % 10);} else {tail->next = new ListNode(sum % 10);tail = tail->next;}carry = sum / 10;if (l1) {l1 = l1->next;}if (l2) {l2 = l2->next;}}if (carry > 0) {tail->next = new ListNode(carry);}return head;}
};
执行状态:
如果有疑问欢迎在下方评论,我会光速回复的!!!
反转链表与链表实现两数相加(简单思路)相关推荐
- leetcode-445. 两数相加 II
给你两个 非空 链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储一位数字.将这两数相加会返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 进阶: 如 ...
- LeetCode 2 两数相加(链表)
题目要求: 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入 ...
- python 链表两数相加
| 两数相加 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. 请你将两个数相加,并以相同形式返回一个表示和的链表. 你可以假设 ...
- 链表相加 2. 两数相加
2. 两数相加 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链 ...
- LeetCode 445. 两数相加 II(链表大数加法)
1. 题目 给定两个非空链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储单个数字.将这两数相加会返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 进 ...
- [链表遍历|模拟] leetcode 2 两数相加
[链表遍历|模拟] leetcode 2 两数相加 1.题目 题目链接 给出两个非空的链表用来表示两个非负的整数.其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字. 如果 ...
- leetcode链表中的两数相加问题
2. 两数相加 找出两个链表中较长的链表,原地修改后,作为最后的返回结果 两个链表从前往后遍历,考虑进位,直到短链表结束. 将长链表数值放入结果(考虑进位). 考虑是否需要额外增加一个结点来放进位 c ...
- 力扣刷题-单链表两数相加
分区:链表 2.两数相加 题目描述: 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. 请你将两个数相加,并以相同形式返回一个表 ...
- 练习:两数相加(链表逆序存储求和数字)
2021年「博客之星」评选开始投票开启--我想要您投一票 我的CSDN主页 My Python 学习个人备忘录 我的博文推荐 两数相加 CSDN"每日一练"(Python)题 ...
- 链表/模拟 - 两数相加
题目链接 模拟两数相加,记录进位. /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *ne ...
最新文章
- c语言程序设计入门导论,程序设计入门——C语言
- 《精通自动化测试框架设计》目录—导读
- Sprint会议记录(第五组)
- Linux和Windows路由配置
- 弹性盒子内容体居右对其_弹性盒子侧轴对齐方式
- 数据结构与算---重点复习知识
- Java实现图片压缩代码,图片大小转换
- linux 通过at命令创建任务
- python爬虫怎么赚钱-如何利用python爬虫挣钱
- 29 顺时针打印矩阵(四-画图让抽象问题形象化)
- 一维 cnn matlab,1D-CNN 一维信号的深度学习算法和例子包括CNN - 下载 - 搜珍网
- Win11怎么把桌面文件路径改到D盘
- python图像质量评价_图像质量评价和视频质量评价(IQA/VQA)
- thinkpadt410接口介绍_【ThinkPadT410s(2912BR7)评测】丰富接口满足日常所需-中关村在线...
- 钉钉日志范文100篇_钉钉日志,让领导看得见你的工作
- vue spa项目转服务器渲染
- 通过uc_client接口方式,更新discuz会员头像
- Windows系统盘瘦身
- Domain Adaption 领域自适应
- LeetCode题解(1552):将多个球放入指定位置的多个篮子后两球之间最小距离的最大值(Python)