问题:

package com.nxz.blog.otherTest;public class TestLeetCode {public static void main(String[] args) {TestLeetCode t = new TestLeetCode();ListNode l1 = new ListNode(2);ListNode l2 = new ListNode(4);ListNode l3 = new ListNode(3);ListNode r1 = new ListNode(5);ListNode r2 = new ListNode(6);ListNode r3 = new ListNode(4);l1.next = l2;l2.next = l3;r1.next = r2;r2.next = r3;ListNode listNode = t.addTwoNumbers(l1, r1);do {System.out.println(listNode.val);} while ((listNode = listNode.next )!= null);}/*** 循环 l1 和 l2 两个listnode,当l1 或 l2 不为null的时候,将两个数相加,大于10时进行处理(保存进一位),否则视为0和另一个值相加** @param l1* @param l2* @return*/public ListNode addTwoNumbers(ListNode l1, ListNode l2) {     //哑结点,最终返回的节点就是该节点的下一个节点ListNode dummyHead = new ListNode(-1);//暂存变量ListNode p = l1, q = l2, curr = dummyHead;//大于10时的暂存值int carry = 0;//当p或q不为null是,将值相加,此时需要处理,其中一个为null的情况while (p != null || q != null) {//只要p或q为nul时,将val值默认为0,和另一个值相加int x = p != null ? p.val : 0;int y = q != null ? q.val : 0;int sum = carry + x + y;//重新设置进一变量carry = sum / 10;curr.next = new ListNode(sum % 10);//重新设置当前节点,p,q节点,以便再一次循环curr = curr.next;if (p != null) {p = p.next;}if (q != null) {q = q.next;}}//最后处理最高为的carry的值if (carry > 0) {curr.next = new ListNode(carry);}return dummyHead.next;}public static class ListNode {int val;ListNode next;ListNode(int x) {val = x;}}
}

进阶----->>>>

两数相加:节点为正序的情况

package com.nxz.blog.otherTest;import java.util.Stack;public class TestLeetCode {public static void main(String[] args) {TestLeetCode t = new TestLeetCode();ListNode l1 = new ListNode(2);ListNode l2 = new ListNode(4);ListNode l3 = new ListNode(3);ListNode r1 = new ListNode(5);ListNode r2 = new ListNode(6);ListNode r3 = new ListNode(4);l1.next = l2;l2.next = l3;r1.next = r2;r2.next = r3;ListNode listNode = t.addTwoNumbers(l1, r1);do {System.out.println(listNode.val);} while ((listNode = listNode.next) != null);}/*** 利用栈这种数据结构(先进后出),这样就可以将正序的节点转换为倒叙的节点了,这样依次从两个栈中取出值(顺序就是个、十、百。。。)* 这样就转换为之前的那种方式了** @param l1* @param l2* @return*/public ListNode addTwoNumbers(ListNode l1, ListNode l2) {Stack<ListNode> stack1 = new Stack<>();Stack<ListNode> stack2 = new Stack<>();ListNode dummyHead = new ListNode(-1);ListNode p = l1, q = l2, head = dummyHead;while (p != null) {stack1.add(p);p = p.next;}while (q != null) {stack2.add(q);q = q.next;}p = stack1.pop();q = stack2.pop();int carry = 0;while (p != null || q != null) {int x = p != null ? p.val : 0;int y = q != null ? q.val : 0;int sum = carry + x + y;carry = sum / 10;ListNode last = head.next;head.next = new ListNode(sum % 10);head.next.next = last;p = stack1.isEmpty() ? null : stack1.pop();q = stack2.isEmpty() ? null : stack2.pop();}if (carry > 0) {ListNode last = head.next;head.next = new ListNode(carry);head.next.next = last;}return dummyHead.next;}public static class ListNode {int val;ListNode next;ListNode(int x) {val = x;}}
}

leetcode-2-两数相加相关推荐

  1. [链表遍历|模拟] leetcode 2 两数相加

    [链表遍历|模拟] leetcode 2 两数相加 1.题目 题目链接 给出两个非空的链表用来表示两个非负的整数.其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字. 如果 ...

  2. 20200114:(leetcode)两数相加

    两数相加 题目 主要思路 代码实现 题目 注意点:不以0开头 主要思路 逐个相加即可,注意需要逆序加,注意进位即可: 由于数字是个位数的,因此进位只有可能是0或者1: 注意定义的有参构造器. 代码实现 ...

  3. LeetCode 445. 两数相加 II(链表大数加法)

    1. 题目 给定两个非空链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储单个数字.将这两数相加会返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 进 ...

  4. LeetCode 2 两数相加

    给定两个非空链表来代表两个非负数,位数按照逆序方式存储,它们的每个节点只存储单个数字.将这两数相加会返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 - ...

  5. LeetCode 2 两数相加(链表)

    题目要求: 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入 ...

  6. LeetCode:2. 两数相加(中等)

    2. 两数相加(中等) 题目: 解题思路: 源码: 踩坑点: 题目: 解题思路: 把俩个链表对应位相加,如果大于等于10,对10取余,小于10,直接得到这一位 解题过程存在这样几个问题: 1.进行循环 ...

  7. leetcode算法—两数相加 Add Two Numbers

    关注微信公众号:CodingTechWork,一起学习进步. 题目 Add Two Numbers: You are given two non-empty linked lists represen ...

  8. leetcode —— 2. 两数相加 (对于链表更新的细节)

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

  9. leetcode 2. 两数相加

    难度:中等 频次:72 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. 请你将两个数相加,并以相同形式返回一个表示和的链表. ...

  10. 力扣(Leetcode)-2. 两数相加

    描述 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. 请你将两个数相加,并以相同形式返回一个表示和的链表. 你可以假设除了数字 ...

最新文章

  1. SQL注入测试平台 SQLol -6.CHALLENGES挑战
  2. 设计模式之四:抽象工厂(披萨店生产披萨模拟流程)
  3. Android开发之 当前日期String类型转date类型 java代码中实现方法
  4. Mybatis注解实现一对多关联映射(@Many)
  5. 转载--C语言:浮点数在内存中的表示
  6. 限免下载!揭秘你不知道的计算机“进化论”
  7. AVB Digest转换成ASCII码
  8. 数据结构c语言版实验报告2,数据结构(C语言版) 实验报告 (2)
  9. 架构师被疯抢,华为出了什么招?
  10. iOS APP中第三方APP调用自己的APP,打开文件
  11. java----数据结构与算法----JavaAPI:java.util.Collection接口
  12. Ubuntu命令参考手册
  13. zigbee CC2530 系列教程 9 睡眠唤醒实验
  14. 线性方程组(高斯消元)
  15. python环境下使用opencv把视频切割成图片
  16. 作业一:数据软件系统的介绍及spss的操作简介
  17. ISP-坏点校正(DPC)
  18. 华为Honor6打开开发者选项
  19. 什么是ESB(企业服务总线)
  20. fpga实操训练(uart串口)

热门文章

  1. PHP中的SESSION机制应用
  2. 软件测试和系统试验,实验四 软件系统性测试
  3. 上的网页显示拒绝访问_DLink家庭路由器上发现6个漏洞
  4. Pyqt5 多标签_ESL电子货架标签方案
  5. linux查看睡眠进程,关于 Linux 进程的睡眠和唤醒 ,来看这篇就够了~
  6. android密码dakay,安卓中按钮点击事件onClick的两种实现方式
  7. 哪个网站是计算机知识的,电脑知识网站
  8. python编程内置函数使用方法_python编程(4)--内置函数
  9. 华为新机搭载鸿蒙os,华为5G巅峰之作:2K超清屏幕+鸿蒙OS2.0+3D结构光 颜值与性能并存...
  10. mysql innodb 并行_关于MySQL8.0 InnoDB并行执行的详解