力扣基础题-两数相加

两数相加

题目描述

题目链接:https://leetcode-cn.com/problems/add-two-numbers/

难度:简单

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

样例

解析:

本题可以看作模拟题,模拟的是加法的过程,由于题目中告知数字的顺序是从个位开始,因此只需要对位相加并处理好进位即可。

代码:

class Solution {
  public:
    ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
        ListNode *res = new ListNode();
        ListNode *tmp = res;
        int a, b, cin = 0;
        while (true) {
            a = l1 == nullptr ? 0 : l1->val;  // 取出加数 1 当前位的数字
            l1 = l1 == nullptr ? nullptr : l1->next;

            b = l2 == nullptr ? 0 : l2->val;  // 取出加数 2 当前位的数字
            l2 = l2 == nullptr ? nullptr : l2->next;

            tmp->val = a + b + cin;  // 计算当前位结果并处理进位
            if (tmp->val > 9) {
                cin = 1;
                tmp->val -= 10;
            } else {
                cin = 0;
            }

            if (l1 == nullptr and l2 == nullptr and cin == 0) {
                break;
            }
            tmp->next = new ListNode();
            tmp = tmp->next;
        }
        return res;
    }
};

总结

题目总体来说比较简单,并且没有什么大坑让你踩,只要逻辑正确基本上就能过

posted @ 2022-01-19 15:49  XBCoder  阅读(29)  评论(0)    收藏  举报