2.两数相加

两数相加

在这里插入图片描述

/**
 * 解题思路:定义结果链表头结点,定义进位标志(0),开始循环,定义中间变量节点,
 * 若两个链表均不为空,则两个链表对应元素相加再加上进位标志若大于10则取余并将进位标志置1,否则置0,将得到
 * 结果赋予中间变量节点并加入结果链表中,若只有一个链表为空,则将不为空的那个链表元素加上进位标志若大于10则结果
 * 取0进位标志置为1,否则进位标志置为0,结果赋予中间变量并加入结果链表中,当两个链表均为空时结束循环,结束循环后
 * 判断进位标志是否为1,若为1则生成新节点值为1并加入结果链表中,返回结果链表(删去头结点)。
*/
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode *result = new ListNode();
        ListNode *head = result;
        int move = 0;
        while(true){
            ListNode *temp = new ListNode();
            int s = 0;
            if(l1 != nullptr && l2 != nullptr){
                s = l1->val + l2->val + move;
                l1 = l1->next;
                l2 = l2->next;
            }
            else if(l1 == nullptr && l2 != nullptr){
                s = l2->val + move;
                l2 = l2->next;
            }
            else if(l1 != nullptr && l2 == nullptr){
                s = l1->val + move;
                l1 = l1->next;
            }
            else
                break;
            s >= 10 ? s = s % 10, move = 1 : move = 0;
            temp->val = s;
            result->next = temp;
            result = result->next;
        }
        if(move == 1){
             ListNode *temp = new ListNode(1);
             result->next = temp;
        }
        result = head->next;
        delete head;
        return result;
    }
};

我感觉这题是真不难,没多久就想出来了,而且一遍过,应该算一道easy的题才对,可能唯一容易错的就是别忘啦最后可能还有进位需要新生成一个节点添加上去。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值