Description:
题目大意:相加两个链表的值,左边是高位右边是低位
解题思路:
算法标签:栈
- 设置两个栈,以及进位
- 依次相加
- 构建链表即可
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addInList(ListNode* head1, ListNode* head2) {
// 存储两个链表的值以及结果
stack<int>number1,number2,ans;
// 保存进位
int higher = 0;
ListNode* head = new ListNode(0);
// 设置虚拟头节点
ListNode* dummyhead = head;
while(head1 != NULL) {
number1.push(head1 -> val);
head1 = head1 -> next;
}
while(head2 != NULL) {
number2.push(head2 -> val);
head2 = head2 -> next;
}
while((!number1.empty()) && (!number2.empty())) {
int temp = number1.top() + number2.top() + higher;
ans.push(temp % 10);
higher = temp / 10;
number1.pop();
number2.pop();
}
while(!number1.empty()) {
int temp = number1.top() + higher;
ans.push(temp % 10);
higher = temp / 10;
number1.pop();
}
while(!number2.empty()) {
int temp = number2.top() + higher;
ans.push(temp % 10);
higher = temp / 10;
number2.pop();
}
// 如果进位不为 0
if(higher != 0)
ans.push(higher);
// 构造链表
while(!ans.empty()) {
ListNode* number = new ListNode(0);
number -> val = ans.top();
ans.pop();
head -> next = number;
head = head -> next;
}
// 返回虚拟头节点的下一个节点
return dummyhead -> next;
}
};