描述
给出两个数,分别是用链表存储,求两个数之和。
解决
把这个题目当成数组来思考即可。当一个链表为空的时候,就需要new一个存储空间进行连接,注意进位的判断。
/**
* 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 t1 = 0, t2 = 0;
ListNode *h1 = l1, *h2 = l2;
int c = 0;
bool flag = false;
while (l1 != NULL && l2 != NULL){
t1 = l1 -> val;
t2 = l2 -> val;
if (t1 + t2 >= 10){
t1 = t2 = t1 + t2 - 10;
l1 -> val = t1;
l2 -> val = t2;
if (l1 -> next == NULL && l2 -> next == NULL){
ListNode* ptr = new ListNode(0);
l1 -> next = ptr;
ptr -> val += 1;
}else if (l1 -> next != NULL){
l1 -> next -> val += 1;
}else if (l2 -> next != NULL){
l2 -> next -> val += 1;
}
}else{
l1 -> val = t1 + t2;
l2 -> val = t1 + t2;
}
l1 = l1 -> next;
l2 = l2 -> next;
}
if (l1 != NULL){
while (l1 != NULL){
if (l1 -> val >= 10 && l1 -> next != NULL){
l1 -> val -= 10;
l1 -> next -> val += 1;
}else if (l1 -> val >= 10 && l1 -> next == NULL){
l1 -> next = new ListNode(1);
l1 -> val -= 10;
}
l1 = l1 -> next;
}
return h1;
}
else if (l2 != NULL){
while (l2 != NULL){
if (l2 -> val >= 10 && l2 -> next != NULL){
l2 -> val -= 10;
l2 -> next -> val += 1;
}else if (l2 -> val >= 10 && l2 -> next == NULL){
l2 -> next = new ListNode(1);
l2 -> val -= 10;
}
l2 = l2 -> next;
}
}
return h2;
}
};