题解 | 链表相加(二)
链表相加(二)
https://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) : val(x), next(nullptr) {}
* };
*/
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head1 ListNode类
* @param head2 ListNode类
* @return ListNode类
*/
ListNode* addInList(ListNode* pHead1, ListNode* pHead2) {
ListNode* reverseList_1, * reverseList_2;
ListNode* nList = NULL;
ListNode* t1 = pHead1;
ListNode* t2 = pHead2;
reverseList_1 = (ListNode*)malloc(sizeof(ListNode));
reverseList_2 = (ListNode*)malloc(sizeof(ListNode));
if (pHead1 == NULL && pHead2 != NULL) {
return pHead2;
}
if (pHead1 != NULL && pHead2 == NULL) {
return pHead2;
}
if (pHead1 == NULL && pHead2 == NULL) {
return NULL;
}
int count = 0;
while (t1 != NULL) {
if (count == 0) {
ListNode* temp = (ListNode*)malloc(sizeof(ListNode));
temp->val = t1->val;
temp->next = NULL;
reverseList_1 = temp;
} else {
ListNode* temp = (ListNode*)malloc(sizeof(ListNode));
temp->val = t1->val;
temp->next = reverseList_1;
reverseList_1 = temp;
}
count++;
t1 = t1->next;
}
count = 0;
while (t2 != NULL) {
if (count == 0) {
ListNode* temp = (ListNode*)malloc(sizeof(ListNode));
temp->val = t2->val;
temp->next = NULL;
reverseList_2 = temp;
} else {
ListNode* temp = (ListNode*)malloc(sizeof(ListNode));
temp->val = t2->val;
temp->next = reverseList_2;
reverseList_2 = temp;
}
count++;
t2 = t2->next;
}
count = 0;
int addFlag = 0;//进位标志位
while (reverseList_1 != NULL && reverseList_2 != NULL) {
ListNode* rev1 = reverseList_1;
ListNode* rev2 = reverseList_2;
if (count == 0) {
int sums = rev1->val + rev2->val;
ListNode* temp = (ListNode*)malloc(sizeof(ListNode));
nList = temp;
temp->val = sums % 10;
temp->next = NULL;
addFlag += (sums - temp->val);
reverseList_1 = reverseList_1->next;
free(rev1);
reverseList_2 = reverseList_2->next;
free(rev2);
} else {
int sums = rev1->val + rev2->val + addFlag / 10;
ListNode* temp = (ListNode*)malloc(sizeof(ListNode));
temp->next = nList;;
nList = temp;
temp->val = sums % 10;
addFlag = (sums - temp->val);
reverseList_1 = reverseList_1->next;
free(rev1);
reverseList_2 = reverseList_2->next;
free(rev2);
}
count++;
}
if (reverseList_1 != NULL) {
while (reverseList_1 != NULL) {
ListNode* rev1 = reverseList_1;
int sums = reverseList_1->val + addFlag / 10;
ListNode* temp = (ListNode*)malloc(sizeof(ListNode));
temp->val = sums % 10;
addFlag = (sums - temp->val);
temp->next = nList;
nList = temp;
reverseList_1 = reverseList_1->next;
free(rev1);
}
}
if (reverseList_2 != NULL) {
while (reverseList_2 != NULL) {
ListNode* rev1 = reverseList_2;
int sums = reverseList_2->val + addFlag / 10;
ListNode* temp = (ListNode*)malloc(sizeof(ListNode));
temp->val = sums % 10;
temp->next=nList;
nList=temp;
addFlag = (sums - temp->val);
reverseList_2 = reverseList_2->next;
free(rev1);
}
}
if (addFlag == 10) {
ListNode* temp = (ListNode*)malloc(sizeof(ListNode));
temp->val = 1;
temp->next = nList;
nList = temp;
}
return nList;
}
};
结题思路改天再写,要睡觉了
