leetcode - 2. Add Two Numbers

这道题我是直接在原链表上操作了,开第三条链表用于存储的方法可以降低代码量,但是因为频繁申请空间导致速度变慢。
在这里插入图片描述

/**
 * 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 j(0);
        if(!l1) return l2;
        ListNode *l3=l1,*l4;
        while(l1)
        {
            l4=l1;
            if(l2) {
                l1->val+=l2->val+j;
                l2=l2->next;
            }else{
                l1->val+=j;
            }
            if(l1->val>9)
            {
                l1->val-=10;
                j=1;
            }else{
                j=0;
            }
            l1=l1->next;
        }
        if(l2)
        {
            l4->next=l2;
            while(j)
            {
                if(l2)
                {
                    ++l2->val;
                    l4=l2;
                    if(l2->val>9)
                    {
                        l2->val-=10;
                        j=1;
                    }else{
                        j=0;
                    }
                    l2=l2->next;
                }else{
                    l4->next=new ListNode(1);
                    break;
                }
            }
        }else if(j)
        {
            l4->next=new ListNode(1);
        }
        return l3;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_41938758/article/details/88930933
今日推荐