题解 | #链表相加(二)#

链表相加(二)

https://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 *	ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param head1 ListNode类 
     * @param head2 ListNode类 
     * @return ListNode类
     */
    ListNode* addInList(ListNode* head1, ListNode* head2) {
        ListNode* post = nullptr;
        head1 = reverseList(head1);
        head2 = reverseList(head2);
        int increment = 0, val1 = 0, val2 = 0;
        while (head1 || head2) {
            if (head1) {
                val1 = head1->val;
                head1 = head1->next;
            } else val1 = 0;
            if (head2) {
                val2 = head2->val;
                head2 = head2->next;
            } else val2 = 0;
            int temp = val1 + val2 + increment;
            increment = temp / 10;
            temp = temp % 10;
            auto node = new ListNode(temp);
            if (post) {
                node->next = post;
                post = node;
            } else post = node;
        }
        if (increment) {
            auto node = new ListNode(increment);
            node->next = post;
            post = node;
        }
        return post;
    }

    ListNode* reverseList(ListNode* head) {
        if (!head) return nullptr;
        ListNode *left = nullptr, *curr = head, *right = nullptr;
        while (curr) {
            right = curr->next;
            curr->next = left;
            left = curr;
            curr = right;
        }
        return left;
    }
};

先反转,再逐位相加(记得进位)。

全部评论

相关推荐

想按时下班的大菠萝在...:隔壁学校的,加油多投, 实在不好找可以下个学期开学找,把算法八股准备好,项目有空再换换
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务