【lettcode】链表相加(二)

链表相加


链表相加(二)

在这里插入图片描述
题目实际上说明的就是两个链表存储的是两个对应的数值,我们需要把相加返回对应的一个格式。
首先我们加法运算需要从低位算起,所以我们可以用反转链表将两个链表进行翻转,然后定义一个哨兵位头节点,每次计算的结果放到链表的后面,注意有可能最后有进位,需要我们再创建一个节点置上1,最后记得需要翻转最后的值,因为我们是低位计算完放到链表的后面的。

时间复杂度:O(N)
空间复杂度:O(1)

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */

class Solution {
    
    
public:
    /**
     * 
     * @param head1 ListNode类 
     * @param head2 ListNode类 
     * @return ListNode类
     */
    ListNode* reverse(ListNode* head)
    {
    
    
        ListNode* pre = nullptr;
        ListNode* cur = head;
        while(cur)
        {
    
    
            ListNode* next = cur->next;
            cur->next = pre;
            pre = cur;
            cur = next;
        }
        
        return pre;
    }
    
    ListNode* addInList(ListNode* head1, ListNode* head2) {
    
    
        // write code here
        head1 = reverse(head1);
        head2 = reverse(head2);
        
        int res = 0;
        ListNode* dummy = new ListNode(-1);
        ListNode* dummytail = dummy;
        int flag = 0;
        while(head1 && head2)
        {
    
    
            int res = head1->val + head2->val + flag;
            if(res > 9)
            {
    
    
                flag = 1;
                res = res % 10;
            }
            else{
    
    
                flag = 0;
            }
            dummytail->next = new ListNode(res);
            dummytail = dummytail->next;
            head1 = head1->next;
            head2 = head2->next;
        }
        ListNode* nonempty = (head2 == nullptr ? head1:head2);
        while(nonempty)
        {
    
    
            int res = nonempty->val + flag;
            if(res > 9)
            {
    
    
                flag = 1;
                res = res % 10;
            }
            else{
    
    
                flag = 0;
            }
            dummytail->next = new ListNode(res);
            dummytail = dummytail->next;
            nonempty = nonempty->next;
        }
        if(flag)
        {
    
    
            dummytail->next = new ListNode(1);
            dummytail = dummytail->next;
        }
        
        return reverse(dummy->next);     
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_52344401/article/details/124343892