题解 | #链表相加(二)#
链表相加(二)
https://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* ReverseList(struct ListNode* head);
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head1 ListNode类
* @param head2 ListNode类
* @return ListNode类
*/
struct ListNode* addInList(struct ListNode* head1, struct ListNode* head2 ) {
// write code here
struct ListNode* h1, *h2, *head, *sum;
struct ListNode init;
// n: store the part over 10
int n = 0;
init.next = NULL;
init.val = 0;
sum = &init;
head = sum;
h1 = ReverseList(head1);
h2 = ReverseList(head2);
while (h1 && h2) {
struct ListNode* tmp = (struct ListNode*)malloc(sizeof(struct ListNode));
tmp ->next = NULL;
int m = h1->val + h2->val + n;
if (m >= 10) {
tmp->val = m - 10;
n = 1;
} else {
tmp->val = m;
n = 0;
}
sum->next = tmp;
sum = sum->next;
h1 = h1->next;
h2 = h2->next;
}
while (h1) {
struct ListNode* tmp = (struct ListNode*)malloc(sizeof(struct ListNode));
//tmp->val = h1->val;
int m = h1->val + n;
if (m >= 10) {
tmp->val = m - 10;
n = 1;
} else {
tmp->val = m;
n = 0;
}
tmp ->next = NULL;
sum->next = tmp;
sum = sum->next;
h1 = h1->next;
}
while (h2) {
struct ListNode* tmp = (struct ListNode*)malloc(sizeof(struct ListNode));
//tmp->val = h2->val;
int m = h2->val + n;
if (m >= 10) {
tmp->val = m - 10;
n = 1;
} else {
tmp->val = m;
n = 0;
}
tmp ->next = NULL;
sum->next = tmp;
sum = sum->next;
h2 = h2->next;
}
if (n) {
struct ListNode* tmp = (struct ListNode*)malloc(sizeof(struct ListNode));
tmp->next = NULL;
tmp->val = n;
sum->next = tmp;
}
return ReverseList(head->next);
}
struct ListNode* ReverseList(struct ListNode* head) {
struct ListNode* prev, *next;
prev = NULL;
next = NULL;
while (head) {
next = head->next;
head->next = prev;
prev = head;
head = next;
}
return prev;
}

