/**
- struct ListNode {
- int val;
- struct ListNode *next;
- };
- /
class Solution {
public:
/*
*
* @param head1 ListNode类
* @param head2 ListNode类
* @return ListNode类
*/
ListNode addInList(ListNode* head1, ListNode* head2) {
// write code here
stack<int> st1;//存储链表1的数据
stack<int> st2;//存储链表2的数据
while(head1||head2)//head1和head2都遍历完时推出循环
{
if(head1)
{
st1.push(head1->val);
head1=head1->next;
}
if(head2)
{
st2.push(head2->val);
head2=head2->next;
}
}
ListNode *vhead=new ListNode(-1);
int carry=0;
while(!st1.empty()||!st2.empty()||carry!=0)//这里设置carry!=0,是因为当st1,st2都遍历完时,如果carry=0,就不需要进入循环了
{
int a=0,b=0;
if(!st1.empty())
{
a=st1.top();
st1.pop();
}
if(!st2.empty())
{
b=st2.top();
st2.pop();
}
int get_sum=a+b+carry;//每次的和应该是对应位相加再加上进位
int ans=get_sum%10;//对累加的结果取余
carry=get_sum/10;//如果大于0,就进位
ListNode *cur=new ListNode(ans);//创建节点
cur->next=vhead->next;
vhead->next=cur;//每次把最新得到的节点更新到vhead->next中
}
return vhead->next;


京公网安备 11010502036488号