Day80 | 灵神 | 反转链表 翻倍以链表形式表示的数字

Day80 | 灵神 | 反转链表 翻倍以链表形式表示的数字

2816.翻倍以链表形式表示的数字

2816. 翻倍以链表形式表示的数字 - 力扣(LeetCode)

思路:

看做是两个head相加就直接转变为昨天写的两数相加II了

2. 两数相加 - 力扣(LeetCode)

445. 两数相加 II - 力扣(LeetCode)

Day79 | 灵神 | 反转链表 两数相加 两数相加II | Darlingの妙妙屋

Day79 | 灵神 | 反转链表 两数相加 两数相加II-优快云博客

完整代码:

class Solution {
public:
    //反转链表
    ListNode* reverseList(ListNode* head) {
        ListNode *p=head;
        ListNode *pre=nullptr;
        while(p!=nullptr)
        {
            ListNode* q=p->next;
            p->next=pre;
            pre=p;
            p=q;
        }
        return pre;
    }
    //两数相加的代码
    ListNode* addtwo(ListNode* l1, ListNode* l2) {
        //建立虚拟头结点
        ListNode res;
        ListNode *cur=&res;
        //记录进位
        int carry=0;
        //只要l1 l2 或者carry有一个不为0 那就是要继续循环
        while(l1 || l2 || carry)
        {
            //l1不为空 加上l1的值
            if(l1)
            {
                carry+=l1->val;
                l1=l1->next;
            }
            //l2不为空 加上l2的值
            if(l2)
            {
                carry+=l2->val;
                l2=l2->next;
            }
   			//在创建为下一个结点
            cur->next=new ListNode(carry%10);
            cur=cur->next;
            //新的进位 大于10就是1,小于10就是0
            carry/=10;
        }
        return res.next;
    }
    //反转链表+两数相加=两数相加II
    ListNode* doubleIt(ListNode* head) {
        auto l1=reverseList(head);
        auto l2=addtwo(l1,l1);
        return reverseList(l2);
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值