LeetCode2.两数相加

news2025/1/16 3:49:40

一看完题,我的想法是先算出这两个链表表示的数,然后相加,然后把这个数一位一位的分配给第三个数组,这种方法应该很简单但是要遍历三次数组,于是我就想直接一遍遍历,两个链表同时往后面遍历,把这两个数的和给第三个链表,如果有进位,下一个数加1;但是写完之后出现的问题,因为我的循环是先创建下一个链表然后,指针指向这个链表,然后再进行循环,但是这样就回造成最后面多了一个节点,我想改进一下的但是想不出来,就只能再遍历一遍把最后一个节点删除了,这样算法也不是很优了,以下是我的代码:

lass Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
         ListNode h1 = l1;ListNode h2 = l2;
        if(h1 == null)return h2;
        if(h2 == null)return h1;
        ListNode h3 = new ListNode();
         ListNode l3 = h3;
         int jinwei=0;
         while(h1 !=null || h2!=null){
             int num1=0;int num2=0;
             if(h1!=null){
                 num1 = h1.val;
                 h1=h1.next;
             }
             if(h2!=null){
                 num2 = h2.val;
                 h2=h2.next;
             }
            int sum = num1+num2+jinwei;
            h3.val = sum % 10;
            jinwei = sum > 9 ? 1 : 0;
            h3.next = new ListNode(jinwei);
            h3 = h3.next;
         }h3 = l3;
         while(l3.next.next !=null){
            l3=l3.next;
           }
           if(l3.next.val == 0)l3.next=null;
         return h3;
    }
    
}

然后我觉得这个算法还不如我一开始得想法,于是我就按照一开始得想法写了个代码,就是先算出他们表示那个数,然后和按位分给第三个数组,于是写下了这个代码:

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        long sum = getValue(l1) + getValue(l2);
        if(sum == 0)return new ListNode(0);
        ListNode h3 = new ListNode();
        ListNode l3 = h3;
        while(sum != 0){
            h3.next = new ListNode();
            h3.next.val = (int)(sum % 10);
            sum = sum/10;
            h3 = h3.next;
        }
        return l3.next;
         
    }
    public long getValue(ListNode l){
        int pos =0;long value = 0;
        while(l !=null){
            value+=Math.pow(10,pos)*l.val;
            pos++;
            l=l.next;
        }
        return value;
    }
    
}

前面得测试用例都过了,没想到后面那么大直接溢出了,

还是看看题解吧,题解的方法和我的方法差不多,但是它是用了一个判段是不是head来创建链表,然后拿到一个和就new 一个next节点并把和给它,然后当前指针移到他的下一个指针,如果遍历完了之后还有进位就再创建一个节点,并赋值1。我的是每次都会多创建一个节点,之后再遍历一次,如果最后那个节点是0就删了,如果是1就不删,所以我多了一遍遍历链表的过程。以下是题解代码:

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode head = null, tail = null;
        int carry = 0;
        while (l1 != null || l2 != null) {
            int n1 = l1 != null ? l1.val : 0;
            int n2 = l2 != null ? l2.val : 0;
            int sum = n1 + n2 + carry;
            if (head == null) {
                head = tail = new ListNode(sum % 10);
            } else {
                tail.next = new ListNode(sum % 10);
                tail = tail.next;
            }
            carry = sum / 10;
            if (l1 != null) {
                l1 = l1.next;
            }
            if (l2 != null) {
                l2 = l2.next;
            }
        }
        if (carry > 0) {
            tail.next = new ListNode(carry);
        }
        return head;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1016424.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Unity 实用工具篇】✨ | 编辑器扩展插件 Odin Inspector,快速上手学习

前言【Unity 实用工具篇】✨ | 编辑器扩展插件 Odin Inspector,快速上手学习一、Odin Inspector插件1.1 介绍1.2 相关网站链接1.3 效果展示二、导入插件三、基础功能介绍四、快速上手4.1 Attributes 相关4.1.1 使用Attribute更好的显示数据。Title、BoxGroup、FoldoutGroup4.1…

ruoyi权限设置的坑

如果是手动在页面加了菜单,其实会生成一条数据,也就是2001这条已经有了。 所以生成的SQL就会有重的,这一点要注意。 可以不手动创建菜单,直接使用SQL,或者就改SQL了。 手动页面创建的菜单,一个定要注意&…

Haproxy搭建 Web 群集实现负载均衡

目录 1 Haproxy 1.1 HAProxy的主要特性 1.2 HAProxy负载均衡策略 1.3 LVS、Nginx、HAproxy的区别 2 Haproxy搭建 Web 群集 2.1 haproxy 服务器部署 2.1.1 关闭防火墙 2.1.2 内核配置(实验环境可有可无) ​2.1.3 安装 Haproxy 2.1.4 Haproxy服务…

数额结构(6.1~6.8)

6-1链表的插入算法 题目: 代码 int InsertPost_link(LinkList llist,DataType x,DataType y) {LinkList mllist->next;LinkList n;while(m->data!x){mm->next;4if(mNULL){printf("not exist data %d\n",x);return 0;}}n(LinkList)malloc(si…

Navicat工具连接Oracle数据库

文章目录 准备工具NavicatNavicat的Oracle插件Oracle查看系统版本找到对应的工具版本下载 oci下载 sqlplus 步骤1.打开navicat,工具>选项>环境2.配置3.点击确定,并重启navicat4.创建oracle连接 准备工具 工欲善其事,必先利其器&#x…

《Python趣味工具》——自制emoji2(2)

今天,我们将会完成以下2个内容: 绘制静态emoji总结turtle中常用的绘图函数 文章目录 一、绘制静态emoji::sparkles: 画脸::sparkles:绘制嘴巴::sparkles:绘制眼白:绘制眼白-Part1:绘制眼白—pa…

算法之排序

文章目录 前言一、二分查找1、正常二分2、二分找第一个出现要查找的数的位置3、在旋转数组中找最小数字二分总结 一、归并排序1、正常归并2、小和问题归并总结 前言 之前我们学习了各种排序算法,今天来让我们看看在线OJ上的题目吧,有哪些排序算法有什么…

数据结构之美:如何优化内存和性能

文章目录 什么是数据结构?内存优化使用紧凑的数据类型避免冗余存储使用位运算压缩数据 性能优化使用适当的数据结构减少不必要的复制使用合适的算法 数据结构优化的案例分析结论 🎉欢迎来到数据结构学习专栏~探索数据结构之美:如何优化内存和…

滑动窗口 解题思路

文章目录 算法应用场景滑动窗口解题思路1. 寻找最长2. 寻找最短 算法应用场景 关键词: 满足 xxx 条件 (计算结果,出现次数,同时包含) 最长 / 最短 子串 / 子数组 / 子序列 例如:长度最短的子串 滑动窗口…

EasyX库的下载及基本作图函数的使用【VS编译器】

目录 1、EasyX库的下载 2、基本作图函数 2.1 initgraph() 2.2 setbkcolor() 2.3 circle() 2.4 rectangle(); 2.5 ellipse() 2.6 pie() 2.7 线line() 点putpixel() 多线ployline() 1、EasyX库的下载 直接在官方网站下载一个安装程序:EasyX 库https://easyx.c…

(八)VBA常用基础知识:workbooks操作之打开workbook

打开(六)创建的excel Function Open(FileName As String, [UpdateLinks], [ReadOnly], [Format], [Password], [WriteResPassword], [IgnoreReadOnlyRecommended], [Origin], [Delimiter], [Editable], [Notify], [Converter], [AddToMru], [Local], [C…

Selenium+python怎么搭建自动化测试框架、执行自动化测试用例、生成自动化测试报告、发送测试报告邮件

本人在网上查找了很多做自动化的教程和实例,偶然的一个机会接触到了selenium,觉得非常好用。后来就在网上查阅各种selenium的教程,但是网上的东西真的是太多了,以至于很多东西参考完后无法系统的学习和应用。 以下整理的只是书中…

学信息系统项目管理师第4版系列08_管理科学基础

1. 科学管理的实质 1.1. 反对凭经验、直觉、主观判断进行管理 1.2. 主张用最好的方法、最少的时间和支出,达到最高的工作效率和最大的效果 2. 资金的时间价值与等值计算 2.1. 资金的时间价值是指不同时间发生的等额资金在价值上的差别 2.2. 把资金存入银行&…

肖sir__mysql之视图__009

mysql之视图 一、什么是视图 视图是一个虚拟表(逻辑表),它不在数据库汇总以存储的形式保存(本身不包含数据),视图是动态生成 二、视图的作用? 1、解决数据库中的非常复杂的数据查询 比如&#…

Unity SteamVR 开发教程:用摇杆/触摸板控制人物持续移动(2.x 以上版本)

文章目录 📕教程说明📕场景搭建📕创建移动的动作📕移动脚本⭐移动⭐实时调整 CharacterController 的高度 📕取消手部和 CharacterController 的碰撞 持续移动是 VR 开发中的一个常用功能。一般是用户推动手柄摇杆&…

异步编程 - 14 异步、分布式、基于消息驱动的框架 Akka

文章目录 Akka概述传统编程模型存在的问题对封装特性的挑战对共享内存在现代计算机架构上的误解对调用堆栈的误解 Actor模型解决了传统编程模型的问题Actor模型使用消息传递避免锁和阻塞使用Actor优雅地处理错误 小结 Akka概述 Akka 是一个开源的并发、分布式、基于消息驱动的…

浅谈C++|类的封装篇

引子: C认为万事万物皆为对象,对象有其属性和行为。 人可以作为对象,属性有姓名,年龄,身高,体重等,行为有行走,吃饭,唱歌等。 车也可以作为一个对象,属性有轮…

学生信息登录系统(下)——判断循环语句(五)(for循环篇)

#include <iostream> using namespace std; int main() {bool student[46] 0; //student[0]空出不用int bianhao 0;cin >> bianhao;student[bianhao] 1;return 0; } /* 可是&#xff0c;这个程序只能执行一遍&#xff0c;一次只能录入一个学生&#xff0c;并…

网络请求【小程序】

一、get 二、post 1.获取相应数据 Page({/*** 页面的初始数据*/data: { inptValue:, isArr:[]},/*** 生命周期函数--监听页面加载*/onLoad(options) {},onSubmit(){// console.log(this.data.inptValue)//2.后台请求数据wx.request({url: https://tea.qingnian8.com/demoArt/…

esxi网卡直通后虚拟机无网

出现选网卡的时候无法选中&#xff0c;这里应该是一个bug。 解决方法如下&#xff1a; 1.先随便选择一个网卡 2.勾先取消再重新勾选 3.保存退出&#xff0c;重启虚拟机即可