算法(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;
}
}
发表回复