class Solution {
public:
    ListNode* reverse(ListNode*root) {
	if (root == nullptr || root->next == nullptr)return root;
	ListNode*ans = reverse(root->next);
	root->next->next = root;
	root->next = nullptr;
	return ans;
}
ListNode* addInList(ListNode* head1, ListNode* head2) {
	// write code here
	ListNode*h1 = reverse(head1);
	ListNode*h2 = reverse(head2);
	int pre = 0;
	ListNode*newnode = new ListNode(0);
	ListNode*ans = newnode;
	while (h1&&h2) {
		int temp = h1->val + h2->val + pre;
		int a = temp % 10;
		pre = temp / 10;
		newnode->next = new ListNode(a);
		newnode = newnode->next;
		h1 = h1->next;
		h2 = h2->next;
	}
	if (h1 == nullptr) {
		while (h2) {
			int temp = h2->val + pre;
			int a = temp % 10;
			pre = temp / 10;
			newnode->next = new ListNode(a);
			newnode = newnode->next;
			h2 = h2->next;
		}
	}
	else if (h2 == nullptr) {
		while (h1) {
			int temp = h1->val + pre;
			int a = temp % 10;
			pre = temp / 10;
			newnode->next = new ListNode(a);
			newnode = newnode->next;
			h1 = h1->next;
		}
	}
	if(pre==1)newnode->next = new ListNode(1);
	return reverse(ans->next);
}
};
倒序,相加进位然后再反序一下即可