题解 | 链表相加(二)
链表相加(二)
https://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) : val(x), next(nullptr) {}
* };
*/
#include <clocale>
#include <ostream>
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head1 ListNode类
* @param head2 ListNode类
* @return ListNode类
*/
ListNode* addInList(ListNode* head1, ListNode* head2) {
// write code here
// 反转链表.
ListNode* newHead1 = new ListNode(0);
ListNode* newHead2 = new ListNode(0);
ListNode* newHead = new ListNode(0);
ListNode* p1 = head1;
ListNode* p2 = head2;
while (p1) {
ListNode* t = p1->next;
p1->next = newHead1->next;
newHead1->next = p1;
p1 = t;
}
while (p2) {
ListNode* t = p2->next;
p2->next = newHead2->next;
newHead2->next = p2;
p2 = t;
}
// p1 = newHead1->next, p2 = newHead2->next;
// while(p1) {
// cout << p1->val << " ";
// p1 = p1->next;
// }
// cout << endl;
// while(p2) {
// cout << p2->val << " ";
// p2 = p2->next;
// }
// cout << endl;
int carry = 0;
p1 = newHead1->next, p2 = newHead2->next;
cout << p1->val << " " << p2->val << endl;
while (p1 && p2) {
int sum = (p1->val + p2->val + carry) % 10;
carry = (p1->val + p2->val + carry) / 10;
p1 = p1->next;
p2 = p2->next;
// cout << "sum = " << sum << " " << "carry = " << carry << endl;
ListNode* node = new ListNode(sum);
node->next = newHead->next;
newHead->next = node;
}
while (p1) {
int sum = (p1->val + carry) % 10;
carry = (p1->val + carry) / 10;
p1 = p1->next;
ListNode* node = new ListNode(sum);
node->next = newHead->next;
newHead->next = node;
}
while (p2) {
int sum = (p2->val + carry) % 10;
carry = (p2->val + carry) / 10;
p2 = p2->next;
ListNode* node = new ListNode(sum);
node->next = newHead->next;
newHead->next = node;
}
cout << carry << endl;
if (carry > 0) {
ListNode* node = new ListNode(carry);
node->next = newHead->next;
newHead->next = node;
}
return newHead->next;
}
};
链表相加数据本身就是低位到高位,这样就可以直接遍历链表一位一位进行加法运算
本题给的数据顺序由高位到低位,但是加法的规则又要求从最低位开始相加,所以对两个链表进行反转链表操作即可
360集团公司氛围 352人发布