LeetCode-两数相加

2020-03-26  本文已影响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;
    }
}
上一篇下一篇

猜你喜欢

热点阅读