题目链接:https://leetcode.com/problems/add-two-numbers/
题目大意:给定两个链表,求两个反转链表的和,从后往前输出和的答案。
用了最笨的一种方法,对应一个个数字相加,跟10做比较进行赋值。
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode *t1 = l1;
ListNode *t2 = l2;
ListNode *ans = new ListNode(0);
ListNode *p = ans;
int flag = 0; //标识上一次运算是否大于10
while(t1 && t2){
int temp = t1 -> val + t2 -> val;
if(flag == 0){ //上次运算小于0
if(temp < 10){
p -> next = new ListNode(temp);
flag = 0;
}else{
temp -= 10;
p -> next = new ListNode(temp);
flag = 1;
}
}else{
temp += 1;
if(temp < 10){
p -> next = new ListNode(temp);
flag = 0;
}else{
temp -= 10;
p -> next = new ListNode(temp);
flag = 1;
}
}
t1 = t1 -> next;
t2 = t2 -> next;
p = p -> next;
}
while(t1){
if(flag == 0){
p -> next = new ListNode(t1 -> val);
flag = 0;
}else{
if(t1 -> val + 1 < 10){
p -> next = new ListNode(t1 -> val + 1);
flag = 0;
}else{
p -> next = new ListNode(t1 -> val - 9);
flag = 1;
}
}
p = p -> next;
t1 = t1 -> next;
}
while(t2){
if(flag == 0){
p -> next = new ListNode(t2 -> val);
flag = 0;
}else{
if(t2 -> val + 1 < 10){
p -> next = new ListNode(t2 -> val + 1);
flag = 0;
}else{
p -> next = new ListNode(t2 -> val - 9);
flag = 1;
}
}
p = p -> next;
t2 = t2 -> next;
}
if(flag == 1){
p -> next = new ListNode(1);
}
p = p -> next;
return ans->next;
}
};
代码冗长,很多重复代码。哈哈哈哈哈