[LeetCode]习题2

来源:互联网 发布:java get请求什么意思 编辑:程序博客网 时间:2024/05/29 07:03

[LeetCode]习题

首先贴上本题的链接https://leetcode.com/problems/add-two-numbers/description/

该题要求我们对给出的两个链表进行加法和进位。这道题的难点在于链表的长度位置,但第一个为非空,且要求进位是难点。
我们先化繁为简,先处理最简单的链表相应位置相加,即当node!=null时将其中的值相加并令node.next=next,于是普通的相加就完成了,接下来就是处理进位的问题,我们令初始进位carry=0,然后每次相加时用sum=x+y+carry,并且记得获取下一个进位carry=sum/10,进位也完成了。再接下来就是进行长短不一的链表,当两个链表有一个不为空时继续计算。当链表相应位置为空时,我们设为0,于是我们用三模运算进行判断最为方便,即int x = (p != null) ? p.val : 0; 在while语句的最后再判断next是否为空,即可完成。最后要注意链表的最后是否有进位,有的话我们的加法链表结果要多一位,即最后一位为1.
下面贴代码。

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */class Solution {    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {        ListNode result = new ListNode(0);        ListNode p = l1,q = l2,node = result;        int carry = 0;        while(p!=null || q !=null){            int x = (p != null) ? p.val : 0;            int y = (q != null) ? q.val : 0;            int sum = x+y+carry;            carry = sum/10;            node.next = new ListNode(sum%10);            node = node.next;            if(p!=null) p=p.next;            if(q!=null) q=q.next;        }        if(carry>0)            node.next = new ListNode(carry);        return result.next;    }}
原创粉丝点击