题解 | #链表相加(二)#
链表相加(二)
https://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b?tpId=295&tqId=727&ru=%2Fexam%2Foj&qru=%2Fta%2Fformat-top101%2Fquestion-ranking&sourceUrl=%2Fexam%2Foj
/**
* 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 利用栈来实现
//1、将两个链表长度求出来,合并为一个链表
//2、将链表节点入栈,然后考虑进制输出
ListNode *p,*q;
auto *first=new ListNode(0);
first->next=nullptr;
stack<ListNode *>s;
p=head1;
q=head2;
int len1=0,len2=0;
while(p){
len1++;
p=p->next;
}
while(q){
len2++;
q=q->next;
}
p=len1>=len2?head1:head2;
q=len1<len2?head1:head2;
int n=abs(len1-len2);
while(n){
p=p->next;
n--;
}
while(p){
p->val+=q->val;
p=p->next;
q=q->next;
}
p=len1>=len2?head1:head2;
while (p) {
s.push(p);
p=p->next;
}
while (!s.empty()) {
ListNode *t=s.top();
s.pop();
if(t->val>=10){
if(!s.empty()){
s.top()->val+=t->val/10;
t->val=t->val%10;
}
else{
auto *temp =new ListNode(t->val/10);
s.push(temp);
t->val=t->val%10;
}
}
t->next=first->next;
first->next=t;
}
return first->next;
}
};
