首页 > 其他分享 >两个单链表相加

两个单链表相加

时间:2024-05-25 22:58:06浏览次数:14  
标签:单链 ListNode cur val 相加 next 两个 null sum

描述

假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。

给定两个这种链表,请生成代表两个整数相加值的结果链表。

数据范围:0≤n,m≤10000000≤n,m≤1000000,链表任意值 0≤val≤90≤val≤9
要求:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)

例如:链表 1 为 9->3->7,链表 2 为 6->3,最后生成新的结果链表为 1->0->0->0。

示例1

输入:

[9,3,7],[6,3]

返回值:

{1,0,0,0}

说明:

如题面解释     

示例2

输入:

[0],[6,3]

返回值:

{6,3}

思路:

1.先将两个单链表逆序,再相加,然后使用头插法插入结点。注意最后一次有进位,但是已经没有结点的情况,此时要比最长的链表长1
import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param head1 ListNode类
     * @param head2 ListNode类
     * @return ListNode类
     */
    public ListNode addInList (ListNode head1, ListNode head2) {
        // write code here
        if (head1 == null) return head2;
        if (head2 == null) return head1;
        head1 = reverse(head1);
        head2 = reverse(head2);
        ListNode p = head1, q = head2;
        int sum = 0;
        ListNode dummy = new ListNode(-1);
        dummy.next = null;
        while (p != null && q != null) {
            int t = (sum + p.val + q.val) % 10;
            sum = (sum + p.val + q.val) / 10;
            ListNode cur = new ListNode(t);
            cur.next = dummy.next;
            dummy.next = cur;
            p = p.next;
            q = q.next;
        }
        while (p != null) {
            int t = (sum + p.val) % 10;
            sum = (sum + p.val) / 10;
            ListNode cur = new ListNode(t);
            cur.next = dummy.next;
            dummy.next = cur;
            p = p.next;
        }
        while (q != null) {
            int t = (sum + q.val) % 10;
            sum = (sum + q.val) / 10;
            ListNode cur = new ListNode(t);
            cur.next = dummy.next;
            dummy.next = cur;
            q = q.next;
        }
        if (sum != 0) {
            ListNode cur = new ListNode(sum);
            cur.next = dummy.next;
            dummy.next = cur;
        }
        return dummy.next;
    }
    public ListNode reverse(ListNode root) {
        if (root == null) return null;
        ListNode pre = new ListNode(-1);
        pre.next = null;
        ListNode cur = root;
        while (cur != null) {
            ListNode t = cur;
            cur = cur.next;
            t.next = pre.next;
            pre.next = t;
        }
        return pre.next;
    }
}

标签:单链,ListNode,cur,val,相加,next,两个,null,sum
From: https://blog.csdn.net/2402_84062759/article/details/139050590

相关文章

  • leetcode以及牛客网单链表相关的题、移除链表元素、链表的中间节点、合并两个有序链表
    文章目录前言一、移除链表元素二、链表的中间节点三、合并两个有序链表四、反转链表五、链表分割六、倒数第k个节点七、链表的回文结构八、相交链表九、判断链表是否有环十、判断环形链表的入口点十一、随机链表的复制总结前言leetcode以及牛客网单链表相关的题、移......
  • C++ - 比较两个浮点数大小
    简介两个浮点数不能直接使用 ==来确定相等,因为浮点数精度可能导致微小的误差 方法一:使用std::abs()函数来比较两个浮点数的差值是否小于一个非常小的阈值floata=1.5;floatb=2.3;floatepsilon=1e-9;if(std::abs(a-b)<epsilon){cout<<"aiseq......
  • 两个人不约而同的说相同的话做相同的事,是什么情况 ... 2个回答 - 回答时间: 2018年1
    两个人不约而同的说相同的话做相同的事,是什么情况...2个回答-回答时间:2018年1月25日最佳答案: 心有灵犀一点通。......
  • 【C++】两个类的相互引用_c++ 类相互引用
    有时候在设计数据结构的时候,可能会遇到两个类需要相互引用的情形。比如类A有类型为B的成员,而类B又有类型为A的成员。那么这种情形下,两个类的设计上需要注意什么呢?同一文件尝试方案将A和B的定义都放在一个文件中,例如:#include<iostream>classA{public:......
  • 在Linux中,如何比较两个文件差异?
    在Linux中,有多种方法可以用来比较两个文件的差异。以下是其中一些常用的工具和方法:1.使用diff命令diff是Linux中用于比较两个文件差异的标准命令。它会逐行比较两个文件,并输出它们的差异。示例:比较文件file1.txt和file2.txt的差异:difffile1.txtfile2.txt输出......
  • 案例分析:通过两个学生项目的例子,推断出这些团队的血型
    案例分析:通过两个学生项目的例子,推断出这些团队的血型:1、STG游戏的跳票(为了完美,推迟了7天,但是7天之后也没有发布……)我怀着无比沉痛的心情宣布,我们的游戏因尚未达到预期的可玩性,为了不丢人现眼,延迟发布i天(i<=7)。我们在起初的计划中,以发布后一周的下载量作为项目衡量的标准。虽......
  • 案例分析:通过两个学生项目的例子,推断出这些团队的血型:
    1、STG游戏的跳票(为了完美,推迟了7天,但是7天之后也没有发布……)我怀着无比沉痛的心情宣布,我们的游戏因尚未达到预期的可玩性,为了不丢人现眼,延迟发布i天(i<=7)。我们在起初的计划中,以发布后一周的下载量作为项目衡量的标准。虽然跳票,但是我们的标准未变化。因为还有市场审核的时间,......
  • 判断两个数的最大公约数
    ​常见点击查看代码#include<bits/stdc++.h>usingnamespacestd;intgcd(inta,intb){returnb?gcd(b,a%b):a;}intmain(){inta,b,c;while(1){cout<<"输入两个数字求最大公约数"<<endl;cin>>a>>b;......
  • 2.两数相加
    给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字0之外,这两个数都不会以0开头。示例1:输入:l1=[2,4,3],l2=[5,6,4]输出:[7,0......
  • 2024-05-18:用go语言,给定一个从 0 开始的字符串 s,以及两个子字符串 a 和 b,还有一个整数
    2024-05-18:用go语言,给定一个从0开始的字符串s,以及两个子字符串a和b,还有一个整数k。定义一个“美丽下标”,当满足以下条件时:1.找到字符串a在字符串s中的位置,且该位置范围为0<=i<=s.length-a.length。2.找到字符串b在字符串s中的位置,且该位置范围为0<=j......