LeetCode-面试题02.05.链表求和C++

题目描述

在这里插入图片描述

思路 逐位计算

/**
 * 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) {
    
    
        //哨兵结点
        ListNode* pre = new ListNode(0);
        ListNode* head = pre;
        int cur = 0, flag = 0;
        while(l1 || l2 || flag) {
    
    
            cur = 0;
            if(l1) {
    
    
                cur += l1 -> val;
                l1 = l1 -> next;
            }
            if(l2) {
    
    
                cur += l2 -> val;
                l2 = l2 -> next;
            }
            cur += flag;
            flag = cur / 10;
            ListNode* tmp = new ListNode(cur % 10);
            pre -> next = tmp;
            pre = tmp;
        }
        return head -> next;
    }
};

这里要注意while判断要包括flag,因为可能有最后一位
时间复杂度O(n),空间复杂度O(1)

猜你喜欢

转载自blog.csdn.net/qq_42883222/article/details/114697759
今日推荐