因为是从后相加,往前进位,使用栈最方便,每次各取一个数,相加,分别与10取余和取模,余数作为进位,模作为值。由于下一个和需要加上进位,所以每次各取一个数相加时还需要加上余数。模就是最终的节点,所以没得到一个模,就将其插入到head后面,head后面原来的值后移,由于栈空之后还可能进位,所以最后要根据是否进位判断是否还要再插入进位值到head后面。
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param head1 ListNode类
* @param head2 ListNode类
* @return ListNode类
*/
public ListNode addInList (ListNode head1, ListNode head2) {
Stack<ListNode> s1 = new Stack<>();
Stack<ListNode> s2 = new Stack<>();
ListNode c1 = head1;
ListNode c2 = head2;
ListNode head=new ListNode(-1);
while(c1 != null){s1.push(c1);c1 = c1.next;}
while(c2 != null){s2.push(c2);c2 = c2.next;}
int result = 0;
while(!s1.empty() || !s2.empty()){
int a=0,b=0;
if(!s1.empty())a=s1.pop().val;
if(!s2.empty())b=s2.pop().val;
int sum = a+b+result;
result = sum/10;
int val = sum%10;
ListNode cur = new ListNode(val);
ListNode temp = head.next;
head.next = cur;
head.next.next = temp;
}
if(result == 1){
ListNode temp = head.next;
ListNode cur = new ListNode(1);
head.next = cur;
head.next.next = temp;
}
return head.next;
}
}