每日一练 两数相加问题(leetcode)

文章讲述了如何在Java中通过单向链表结构实现两个数的加法,关注进位处理策略和特殊情况的代码实现。
摘要由CSDN通过智能技术生成

原题如下:

这道题目是一道链表题,我们对于这种链表类,很显然我们最后输出的是初始节点,所以我们要保留我们的初始头指针,那么我们的第一步一定是把头指针保留一份,然后再让头指针往后进行操作。那么我们进行什么操作呢,很简单,就是把l1和l2的对应内容加起来就行了,那么我们就面临这样几个问题。

第一,加的太“多”了,什么叫加多了呢,就是我们的和超过9了,这样的话显然我们要进行进位,我们进位后的那个数等于什么呢?显然是等于我们的和取余10,那么怎么表示我们后面一个要进位加1呢?我们可以再做一个进位指针,标记为0时表示没有进位,为1时表示已经进位(显然我们这里只能是进1)。那么我们之后的和其实等于l1+l2+进位指针的值,综合起来我们一开始把进位指针设为0,那么我们所有的和都可以为l1+l2+进位指针的值。

第二,加的太“少”了,什么意思呢?就是当l1和l2为空值的时候,我们是拿不到我们的val值的,所以这个时候我们人工设为0.

第三,l1和l2都为null,我们还要进位1,这个时候怎么办呢?显然我们只需要把我们的答案输出链表末尾加上一个1即可。

以下是代码(java)实现:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode answerpre = new ListNode(0) ;
        ListNode answer = answerpre ;
        int jinzhi = 0 ;
        while(l1 != null || l2 != null){
            int x = l1 == null ? 0 : l1.val ;
            int y = l2 == null ? 0 : l2.val ;
            int ans = x + y + jinzhi ;
            jinzhi = ans/10 ;
            ans = ans % 10 ;
            answer.next = new ListNode(ans) ;
            answer = answer.next ;
            if(l1 != null){
                l1 = l1.next ;
            }
            if(l2 != null){
                l2 = l2.next ;
            }
        }
        if( jinzhi == 1 ){
            answer.next = new ListNode(1) ;
            answer = answer.next ;
        }
        return answerpre.next ;
    }
}
  • 31
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值