LeetCode2 两数相加 Add Two Numbers

10 篇文章 0 订阅
10 篇文章 0 订阅

LeetCode2 两数相加 Add Two Numbers

题目描述

题目地址:https://leetcode-cn.com/problems/add-two-numbers/
题目难度:中等

给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。
如果我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字0之外,这两个数都不会以0开头。

示例

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

分析

这道题主要考验的是我们对链表结构的熟悉程度,这道题最大的难点就在于想加的时候存在进位的情况,但是对我来说还有就是链表的结构,虽然说大学时学过数据结构和算法,当时是学懂了,但是长时间没看已经还给了老师,所以这道题对我来说还是有点挑战的。

  • 首先题目默认给出了链表的基本结构,通过简单的分析与尝试,可以大致知道链表结构的基本特性,存储数据和读取数据顺序都是反着来的,不过这样反而方便我们在进位的时候直接进行操作;

  • 另外还有一个小坑就是空链表的情况,可以通过创建一个只有头节点的链表,然后将他的下一个节点连接到给出的链表上;

  • 还有就是需要复制链表地址,不能直接对物理地址进行操作,这样会导致操作过程中立案表结构发生改变。

解答

class ListNode {
    int val;
    ListNode next;
    ListNode(int x) {
        val = x;
    }
}

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    //需要考虑空链表的情况
    ListNode list = new ListNode(0);
    ListNode p = l1;
    ListNode q = l2;
    ListNode l = list;
    //进位变量
    int plus = 0;
    if (p == null && q != null) {
        return q;
    }
    if (q == null && p != null) {
        return p;
    }
    while (p != null || q != null) {
        int x = p != null ? p.val : 0;
        int y = q != null ? q.val : 0;
        int sum = x + y + plus;
        plus = sum / 10;
        l.next = new ListNode(sum % 10);
        l = l.next;
        if (p != null) {
            p = p.next;
        }
        if (q != null) {
            q = q.next;
        }
    }
    //最后一位是进位时
    if (plus > 0) {
        l.next = new ListNode(plus);
    }
    return list.next;
}

相似题目

leetcode19 删除链表的倒数第N个节点,后续添加地址

总结

通过这道题我大体上搞懂了链表的一些基本特性,以及使用过程中的一些注意事项。整体来说这道题不算复杂,只需要从最低位的数字开始相加,后面再加上进位,如果说有一个数字有很多位,则直接就将剩余的部分接到后边即可。
若是有哪里写的有问题,欢迎点出,万分感谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值