题解 | 链表相加(二)
链表相加(二)
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* head1, ListNode* head2) {
// write code here
auto GetStackData = [](ListNode * node) -> stack<ListNode*> {
stack<ListNode*> s;
while (node != nullptr) {
s.push(node);
node = node->next;
}
return s;
};
auto s1 = GetStackData(head1);
auto s2 = GetStackData(head2);
if (s1.empty()) {
return head2;
} else if (s2.empty()) {
return head1;
}
auto fake = ListNode(0);
ListNode* cur = &fake;
int cross = 0;
while (!s1.empty() && !s2.empty()) {
auto sum = s1.top()->val + s2.top()->val + cross;
cross = 0;
if (sum > 9) {
sum -= 10;
cross = 1;
}
auto new_node = new ListNode(sum);
new_node->next = cur->next;
cur->next = new_node;
s1.pop();
s2.pop();
}
if (s1.empty()) {
while (!s2.empty()) {
auto sum = s2.top()->val + cross;
cross = 0;
if (sum > 9) {
sum -= 10;
cross = 1;
}
auto new_node = new ListNode(sum);
new_node->next = cur->next;
cur->next = new_node;
s2.pop();
}
} else {
while (!s1.empty()) {
auto sum = s1.top()->val + cross;
cross = 0;
if (sum > 9) {
sum -= 10;
cross = 1;
}
auto new_node = new ListNode(sum);
new_node->next = cur->next;
cur->next = new_node;
s1.pop();
}
}
if (cross == 1) {
auto new_node = new ListNode(cross);
new_node->next = cur->next;
cur->next = new_node;
}
return fake.next;
}
};


