LeetCode解题(4)Java两数相加

题目

两数相加

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:

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

解题

class Solution {
      public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        int num=0;
        ListNode result=new ListNode(0);
        ListNode l1next=l1;
        ListNode l2next=l2;
        ListNode res=result;
        while(l1next!=null||l2next!=null){

            int l1Value=(l1next!=null)?l1next.val:0;
            int l2Value=(l2next!=null)?l2next.val:0;
            int sum=l1Value+l2Value+num;
            //进位
            num=(sum)/10;
            //余数
            int x=(sum)%10;
            res.next=new ListNode(x);
            res=res.next;
            if(l1next!=null)
                l1next=l1next.next;
            if(l2next!=null)
                l2next=l2next.next;
        }
        if(num>0){
            res.next=new ListNode(num);
        }
        return result.next;
    }
}

在这里插入图片描述

这个评定看运气的,大致就是这样

解题思路

用到了链表的知识

刚开始刷题,不是很清楚ListNode是什么?
ListNode对象是一个链表结点,题目限制了值为0到9的整数

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

分析题目知道关键在于进位的处理

在这里插入图片描述
创建一个result结果链表res,要new一个和l1,l2一样的表头result

L1,L2赋值给l1next,l2next

l1next,l2next通过next获得l1,l2的结点值,然后相加、进位运算赋给res

最后返回result.next即跳过表头返回列表

注意最后一位可能会进位导致result链表要多一位

反思

对链表有点不熟,最开始甚至想到用map存进位值和余数
多加练习

发布了95 篇原创文章 · 获赞 25 · 访问量 4211

猜你喜欢

转载自blog.csdn.net/key_768/article/details/104410802
今日推荐