美文网首页
LeetCode-两数相加

LeetCode-两数相加

作者: 沙漠小舟 | 来源:发表于2020-03-26 13:09 被阅读0次

    题目链接 => 戳这里

    题目描述截图.png
    其实这道题理解之后本身并不难,需要注意的有3点:
    1.链表节点位置的转移需要细心点,每条链表上的节点都要记得转移到下一节点;
    2.另外就是需要保存好dummyNode头结点,不能直接用它来转移节点位置,不然后面我们就无法返回链表头结点指针了;
    3.比较容易忽略的情况是两个数值链表的最后节点相加,产生了进位,这时我们还需要新建节点,用于存储该进位值。
    为了帮助自己理解算法流程,可以想象一下自己在做竖式加法,其实他们的方式是一样的。

    解法

    /**
     * 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 dummyNode = new ListNode(0);
            ListNode p = l1, q = l2, t = dummyNode;
            int carry = 0;
            while (p != null || q != null) {
                int m = p == null ? 0 : p.val;
                int n = q == null ? 0 : q.val;
                int sum = carry + m + n;
                carry = sum / 10;
                ListNode temp = new ListNode(sum % 10);
                t.next = temp;
                t = t.next;
                if (p != null) {
                    p = p.next;
                }
                if (q != null) {
                    q = q.next;
                }
            }
            if (carry > 0) {
                ListNode appednNode = new ListNode(carry);
                t.next = appednNode;
            }
            return dummyNode.next;
        }
    }
    

    相关文章

      网友评论

          本文标题:LeetCode-两数相加

          本文链接:https://www.haomeiwen.com/subject/uvtcuhtx.html