/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
/**
*
* @param head1 ListNode类
* @param head2 ListNode类
* @return ListNode类
*/
ListNode* reverse(ListNode* p){
ListNode *pre = NULL, *cur = p, *next = NULL;
while(cur){
next = cur->next;
cur->next = pre;
pre = cur;
cur = next;
}
return pre;
}
ListNode* addInList(ListNode* head1, ListNode* head2) {
// write code here
//反转两个链表,从个位相加
ListNode *p1 = reverse(head1);
ListNode *p2 = reverse(head2);
ListNode *res = new ListNode(0);//创建头节点
ListNode *p3 = res;
int add = 0;
while(p1 != NULL || p2 != NULL){//当两个指针不全为空的时候
int val1 = p1?p1->val:0;//若非空,则取值,若为空,则取0
int val2 = p2?p2->val:0;
int sum = val1 + val2 +add;
add = sum / 10;
sum -= add*10;//求和,并且进位,add为0则没有进位,为1则进位
ListNode * node = new ListNode(sum);//创建新节点,并赋值
p3->next = node;
p3 = p3->next;
p1 = p1?p1->next:p1;//非空则下移,空则不动
p2 = p2?p2->next:p2;
}
p3 = res->next;
res = reverse(res);//反转回来
p3->next = NULL;//删除头节点
return res;
}
};