描述
给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
分析
反转两个链表,然后从头到尾求和创建新的结点。
使用栈存储链表的数值,效果也很好。
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
l1 = reverse(l1);
l2 = reverse(l2);
int progress = 0;
ListNode dummy = new ListNode();
ListNode cur = dummy;
while(l1 != null || l2 != null || progress == 1){
int a = l1 == null ? 0 : l1.val;
int b = l2 == null ? 0 : l2.val;
int num = a + b + progress;
progress = num > 9 ? 1 : 0;
ListNode node = new ListNode(num % 10);
cur.next = node;
cur = cur.next;
l1 = l1 == null ? null : l1.next;
l2 = l2 == null ? null : l2.next;
}
cur.next = null;
return reverse(dummy.next);
}
public ListNode reverse(ListNode head){
ListNode pre = null;
while(head != null){
ListNode tmp = head.next;
head.next = pre;
pre = head;
head = tmp;
}
return pre;
}
}