NC40-两个链表生成相加链表

一、题目

假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。

给定两个这种链表,请生成代表两个整数相加值的结果链表。

例如:链表 1 为 9->3->7,链表 2 为 6->3,最后生成新的结果链表为 1->0->0->0。

二、题解

采用栈先进后出的特点计算每一位的累加和

S1:先将两个链表分别入栈;

S2:取栈顶元素做加法,结果存入当前节点;

S3:构建新链表的链接关系。

 

    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;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值