题目描述:
暴力解:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
//代表是否用过最后一个
int flagL1 = 0;
int flagL2 = 0;
//两个都是1个元素的情况判断
int twoCase = 0;
//判断最后一个出循环
int loopBool = 0;
//进位数
int moreAdd = 0;
//按他的莫名规则来
// 先把头结点搞了
ListNode* headNode = new ListNode(0);
//头结点要保留,新建一个
ListNode* tmpNode = new ListNode(0);
tmpNode = headNode;
//遍历
while(true){
int l1EndNum = 0;
int l2EndNum = 0;
if(l1->next!=NULL){
l1EndNum = l1->val;
//后移
l1 = l1->next;
}else{
//最后一个
if(flagL1 == 0){
l1EndNum = l1->val;
flagL1 += 1;
twoCase += 1;
}
}
if(l2->next!=NULL){
l2EndNum = l2->val;
//后移
l2 = l2->next;
}else{
//最后一个
if(flagL2 == 0){
l2EndNum = l2->val;
flagL2 += 1;
twoCase += 1;
}
}
int tmpResult = l1EndNum + l2EndNum + moreAdd;
//进位
moreAdd = floor(tmpResult / 10);
int headVal = tmpResult % 10;
tmpNode->val = headVal;
//判断[0] [0]情况
if(twoCase == 2) break;
if(loopBool == 0){
//下一个节点
ListNode* nextNode = new ListNode(0);
tmpNode->next = nextNode;
tmpNode = nextNode;
}
if(loopBool == 1) break;
if(l1->next==NULL && l2->next==NULL) loopBool = 1;
}
while(moreAdd != 0){
//下一个节点
ListNode* nextNode = new ListNode(0);
nextNode->val = moreAdd;
tmpNode->next = nextNode;
tmpNode = nextNode;
//置零,要不无限循环
moreAdd = 0;
}
return headNode;
}
};