首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

链表-两数相加

问题 给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。...,以此向下进行,放入新链表的头部,遇到相加大于10的进1。...下面我们开始进入编程思路,首先声明一个链表 type ListNode struct { Next *ListNode Val int } 我们想到链表相加不太友好,而且考虑到两个链表长度不一样呢...array1,array2 := buildArray(l1,l2) //对数组相加 result := sumArray(array1,array2) //组装新的链表...从解法一我们得知是从链表头部开始相加,所得结果最后作为新链表的头部,如果大于10,则向上进一位,在创建新链表下一个节点时把进上来的值加上,依次直到两个链表的节点都为空,基于这个我们考虑能不能用递归呢?

70730
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    每日三题-两数相加、反转链表、回文链表

    ‍个人主页: 才疏学浅的木子 ‍♂️ 本人也在学习阶段如若发现问题,请告知非常感谢 ‍♂️ 本文来自专栏: 算法 算法类型:Hot100题 每日三题 两数相加 反转链表 回文链表...两数相加 解法一 使用双指针 每次l1、l2指针都向后移动,但是可能存在一个进位然后保存下来 所以当前值每次都是(l1.val+l2.val+进位)%10,而进位值就是(l1.val+l2.val...s.isEmpty()){ // 比较栈中的值与链表的值是否相等 ListNode t = s.pop(); if(t.val !...= p.val) return false; p = p.next; } return true; } } 解法二 链表反转+比较 与上面链表反转类似不再赘述...解法三 快慢指针 + 链表反转 O(n) 时间 O(1) 空间 与解法二类似,只是只反转后部分链表然后比较 class Solution { public boolean isPalindrome

    18230

    两数相加链表操作

    题目:两数相加 给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。...如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。...,则在新链表最前方添加节点 11 小技巧:对于链表问题,返回结果为头结点时,通常需要先初始化一个预先指针 pre,该指针的下一个节点指向真正的头结点head。...使用预先指针的目的在于链表初始化时无可用节点值,而且链表构造过程需要指针移动,进而会导致头指针丢失,无法返回结果。...=null){ // 如果当前位置无节点,就用0来相加 val a = if(list1==null) 0 else list1.

    30710

    《剑指offer》第24天:链表相加

    第2题:两数相加 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。...如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。...加法肯定是从最低位到最高位进行相加,也就是这里的链表头到链表尾进行相加,所以需要遍历链表。...我们令 l1 和 l2 指向两个链表的头,用一个 tmp 值来存储同一位相加的结果,以及一个新的链表来存储 tmp 的值。...java: class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode

    39710

    链表求和相加,并记录进位情况

    你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。...样例 给出两个链表 3->1->5->null 和 5->9->2->null,返回 8->0->8->null 相加,并记录进位情况 这个没有什么难的,从头开始是个位,然后十位,百位……以此类推,要用一个变量来记录进位情况...,这种相加进位最多进1,然后就是,当一个链表加到头就停止(注意处理进位),然后再处理没有加完的那个链表,处理完之后然后再看有没有进位,有的话放在链表最后,链表也写了很久了,这种操作一定要熟练: 虽然很长...head上 head=head->next; //head向后移动 l1=l1->next; //两个链表向后移动...head上 head=head->next; //head向后移动 l1=l1->next; //两个链表向后移动

    55740

    【Leetcode -141.环形链表 -2.两数相加

    Leetcode -141.环形链表 题目:给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。...请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。...[1, 100] 内 0 <= Node.val <= 9 题目数据保证列表表示的数字不含前导零 我们的思路是,将链表逐一相加拿下来,计算两个结点val之和,因为每个结点只能存放0-9的数字,所以每十进一...,用flag来存放这个一,所以两个结点val之和加上flag,再取余才是拿下来放进新链表的val;当两个链表都空了,如果flag中还留着一,那么要再开辟一个结点,val为1,放到新链表的尾部; 如图,第一次相加...: 第二次相加,n1+n2 = 10,需要进一,所以flag在相加完后变成1; 第三次相加: 当两个链表都走完,但是上两个结点相加进10,flag还留了个1,所以要再开辟一个结点,存放1,把它放到链表的尾部

    8510

    golang刷题1-两单链表数据相加

    package main import ( "fmt" "strconv" ) /** 题目如下: 给出两个 非空 的链表用来表示两个非负的整数。...如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。...,判断两个链表都是nil的情况则退出循环 2:链表循环过程中处理进位的问题,设置一个临时的进位变量,变量值是在next下加上 3:如果最后循环完了还有进一位的情况需要把最后的进一位的值补充到链表最后 4...,判断两个链表都是nil的情况则退出循环 for l1 !...我们要遍历两个链表的全部位置,而处理每个位置只需要 O(1)O(1) 的时间。 空间复杂度:O(\max(m,n))O(max(m,n))。答案链表的长度最多为较长链表的长度 +1+1。

    35670

    两数相加 II(链表大数加法)

    题目 给定两个非空链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表。 你可以假设除了数字 0 之外,这两个数字都不会以零开头。...进阶: 如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。...解题 先将链表转成字符串,对齐两个字符串(短的前面加 ‘0’ ) 用字符串加法,得到新的字符串 把新的字符串输出链表 class Solution { public: ListNode* addTwoNumbers...(ListNode* l1, ListNode* l2) { string n1, n2, s; //链表转字符串 while(l1 && l2)...s.push_back(bit+'0'); } if(carry) s.push_back(carry+'0');//低位在前 //字符串输出链表

    1K30
    领券