解题思路
C++
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* res = new ListNode(-1);//用于存放结果
ListNode* cur = res;//res的移动指针
ListNode* p1 = l1;//l1的移动指针
ListNode* p2 = l2;//l2的移动指针
int sum = 0;//用于记录每一位相加的结果
int carry = 0;//进位
while(p1 != NULL || p2 != NULL){
int a = (p1 == NULL)? 0 : p1->val;//记录l1当前位的值
int b = (p2 == NULL)? 0 : p2->val;//记录l2当前位的值
sum = a + b + carry;//每一位相加
ListNode* s = new ListNode(sum % 10);//创建一个新结点保存当前位相加的结果
cur->next = s;
cur = s;
carry = sum / 10;//记录当前位相加结果的进位
if(p1 != NULL)
p1 = p1->next;
if(p2 != NULL)
p2 = p2->next;
}
if(carry > 0)//最高位有进位
cur->next = new ListNode(carry);
return res->next;
}
};
Java
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode L = new ListNode(0);
ListNode cur = L;
ListNode La = l1;
ListNode Lb = l2;
int carry = 0;
while(La != null || Lb != null){
int a = (La == null)? 0 : La.val;
int b = (Lb == null)? 0 : Lb.val;
int sum = a + b + carry;
cur.next = new ListNode(sum % 10);
carry = sum / 10;
cur = cur.next;
if(La != null){
La = La.next;
}
if(Lb != null){
Lb = Lb.next;
}
}
if(carry > 0){
cur.next = new ListNode(carry);
}
return L.next;
}
}