
LeetCode- 445. 两数相加 II——栈
发布日期:2021-05-07 21:20:26
浏览次数:24
分类:原创文章
本文共 1335 字,大约阅读时间需要 4 分钟。
题目描述
给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
进阶:
如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。
示例:
输入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 8 -> 0 -> 7
解题思路
使用栈来解决,我们需要构建两个栈,将两个链表中的值分别压入这两个栈中。
每次都从两个栈中各弹出一个元素,就是我们所需要的最末位元素,按照计算方式,相加取模求当前位的值,同时我们还需要记录当前位的进位。最后,我们使用获得的值,构建一个节点。
我们需要使用一个指针作为头指针,指向当前节点。每次新增节点,我们只需要将新节点插入到头指针之后即可。
class Solution_445 { /** * 使用栈,可以把链表的头尾进行调换 * @param l1 * @param l2 * @return */ public ListNode addTwoNumbers(ListNode l1, ListNode l2) { Stack<Integer> s1 = new Stack<>(); Stack<Integer> s2 = new Stack<>(); while (l1 != null){ s1.push(l1.val); l1 = l1.next; } while (l2 != null){ s2.push(l2.val); l2 = l2.next; } //创建头节点 ListNode head = new ListNode(0); ListNode cur = head; int flag = 0; //记录进位 while (!s1.isEmpty() || !s2.isEmpty() || flag > 0){ int sum = flag; if (!s1.isEmpty()) sum = sum + s1.pop(); if (!s2.isEmpty()) sum = sum + s2.pop(); flag = sum / 10; //进位 ListNode tmp = new ListNode(sum % 10); tmp.next = head.next; head.next = tmp; } return head.next; }}
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2025年04月15日 15时56分53秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
ERP/MIS开发 LLBL Gen多表操作
2019-03-05
Remove function
2019-03-05
在没实践机会的前提下,如何跨越级别
2019-03-05
泛型的深入研究——面试时说出能加分
2019-03-05
程序员如何高效学Python,如何高效用Python挣钱
2019-03-05
从面试官角度告诉大家如何准备项目方面的描述
2019-03-05
去创业公司不能有一夜暴富的侥幸,更不能指望掉馅饼
2019-03-05
架构师入门:搭建基本的Eureka架构(从项目里抽取)
2019-03-05
Java核心技术及面试指南 流程控制方面的面试题答案
2019-03-05
程序员如何在百忙中更有效地利用时间,如何不走岔路,不白忙(忙得要有效率,要有收获)
2019-03-05
MongoDB 快速扫盲贴
2019-03-05
修复搜狗、360等浏览器不识别SameSite=None 引起的单点登录故障
2019-03-05