leetcode【每日一题】2. 两数相加 java

    科技2022-07-13  124

    题干

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

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

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

    示例:

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

    想法

    模拟加法 每个位置是对应listnode值加上进位

    都从两个node头开始遍历,如果一个完了另一个没完,就单独加另一个即可

    注意循环完成如果进位仍不为0 那就再加个值为进位的头节点

    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) { if(l1==null){ return l2; } if(l2==null){ return l1; } int tem=(l1.val+l2.val)%10; int plus=(l1.val+l2.val)/10; ListNode res=new ListNode(tem); ListNode head=res; while (l1.next!=null&&l2.next!=null){ l1=l1.next; l2=l2.next; tem=(l1.val+l2.val+plus)%10; res.next=new ListNode(tem); res=res.next; plus=(l1.val+l2.val+plus)/10; } while (l1.next!=null){ l1=l1.next; tem=(l1.val+plus)%10; res.next=new ListNode(tem); res=res.next; plus=(l1.val+plus)/10; } while (l2.next!=null){ l2=l2.next; tem=(l2.val+plus)%10; res.next=new ListNode(tem); res=res.next; plus=(l2.val+plus)/10; } if(plus!=0){ res.next=new ListNode(plus); } return head; } }

    我的leetcode代码都已经上传到我的githttps://github.com/ragezor/leetcode

    Processed: 0.011, SQL: 8