算法(JAVA):2力扣第2题双百解法

第2题:两数相加

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 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) {
        int r = 0;
        ListNode h1 = l1, h2 = l2;
        while (h1 != null || h2 != null) {
            int v1 = h1 == null ? 0 : h1.val;
            int v2 = h2 == null ? 0 : h2.val;
            int d = (v1 + v2 + r)%10;
            r = (v1 +v2 +r)/10;

            if (h1 != null) {
                h1.val = d;
                if (h1.next == null && h2!=null && h2.next != null) {
                   h1.next = h2.next;
                   h2.next = null;
                } 

                if (h1.next == null) {
                    break;
                }

                h1 = h1.next;
            } 

            if (h2 != null) {
                h2 = h2.next;
            }
        }

        if (r > 0) {
            h1.next = new ListNode(r);
        }

        return l1;
    }
}

发表回复

您的电子邮箱地址不会被公开。