链表专题—LeetCode 2.Add Two Numbers

解题思路:
1、输入为两个用链表存储的逆序数,输出也为逆序,因此不用将输入转化为正序。
2、从两个链表的头结点开始依次相加,存储到新链表中。
3、注意计算进位。

注意:
1、输入数字很大,要使用大数加法进行计算。
2、两个链表可以不一样长。

class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {

        bool flag = false;
        ListNode *head = NULL;
        ListNode *p = NULL;
        int sum = 0;
        int carry = 0;
        while (l1 != NULL||l2 != NULL){
            int x = (l1 != NULL) ? l1->val : 0;
            int y = (l2 != NULL) ? l2->val : 0;
            sum = x + y + carry;
            if (!flag){
                head = new ListNode(sum % 10);
                p = head;
                flag = true;
            }
            else{
                ListNode *new_node = new ListNode(sum % 10);
                p->next = new_node;
                p = p->next;
            }
            carry = sum / 10;
            if (l1 != NULL)l1 = l1->next;
            if (l2 != NULL)l2 = l2->next;
        }
        if (carry != 0){
            ListNode *new_node = new ListNode(carry);
            p->next = new_node;
            p = p->next;
        }
        return head;
    }


};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值