为了方便计算进位
链表中数据为倒序存储
比如:
234*31
l1:4->3->2
l2:1->3
从个位开始对齐计算,carry计算进位
#include<iostream>
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x) {
val = x;
next = NULL;
}
};
class Solution {
public:
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
ListNode preHead(0), *p = &preHead;
int carry = 0;
while (l1 || l2 || carry) {
int sum = (l1 ? l1->val : 0) + (l2 ? l2->val : 0) + carry;
carry = sum / 10;
p->next = new ListNode(sum % 10);
p = p->next;
l1 = l1 ? l1->next : l1;
l2 = l2 ? l2->next : l2;
}
return preHead.next;
}
};
int main() {
Solution ne;
ListNode l1(0);
l1.next = new ListNode(0);
l1.next->next = new ListNode(1);
ListNode l2(1);
ListNode *p=ne.addTwoNumbers(&l1,&l2);
while(p){
cout<<p->val;
p=p->next;
}
return 0;
}