LeetCode 2. Add Two Numbers

描述

给出两个数,分别是用链表存储,求两个数之和。

解决

把这个题目当成数组来思考即可。当一个链表为空的时候,就需要new一个存储空间进行连接,注意进位的判断。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        int t1 = 0, t2 = 0;
        ListNode *h1 = l1, *h2 = l2;
        int c = 0;
        bool flag = false;
        while (l1 != NULL && l2 != NULL){
            t1 = l1 -> val;
            t2 = l2 -> val;
            if (t1 + t2 >= 10){
                t1 = t2 = t1 + t2 - 10;
                l1 -> val = t1;
                l2 -> val = t2;
                if (l1 -> next == NULL && l2 -> next == NULL){
                    ListNode* ptr = new ListNode(0);
                    l1 -> next = ptr;
                    ptr -> val += 1;
                }else if (l1 -> next != NULL){
                    l1 -> next -> val += 1;
                }else if (l2 -> next != NULL){
                    l2 -> next -> val += 1;
                }
            }else{
                l1 -> val = t1 + t2;
                l2 -> val = t1 + t2;
            }
            l1 = l1 -> next;
            l2 = l2 -> next;
        }
       if (l1 != NULL){
         while (l1 != NULL){
             if (l1 -> val >= 10 && l1 -> next != NULL){
                 l1 -> val -= 10;
                 l1 -> next -> val += 1;
             }else if (l1 -> val >= 10 && l1 -> next == NULL){
                 l1 -> next = new ListNode(1);
                 l1 -> val -= 10;
             }
             l1 = l1 -> next;
         }
         return h1;
       } 
        else if (l2 != NULL){
            while (l2 != NULL){
                if (l2 -> val >= 10 && l2 -> next != NULL){
                     l2 -> val -= 10;
                    l2 -> next -> val += 1;
             }else if (l2 -> val >= 10 && l2 -> next == NULL){
                    l2 -> next = new ListNode(1);
                    l2 -> val -= 10;
             }
             l2 = l2 -> next;
            }
        }
        return h2;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值