当前位置: 首页 > article >正文

leetcode之hot100---2两数相加(C++)

通过遍历链表 l1l2,逐位相加对应节点的值,同时加上前一位的进位 carry。如果某个链表已经遍历完,则用 0 填充其值。对于每次相加的结果,取个位作为新节点的值,进位部分保存在 carry 中。如果链表尚未初始化,创建头节点;否则在尾部添加新节点。遍历结束后,如果 carry 不为 0,则需额外创建一个节点存储最后的进位值,最终返回表示相加结果的链表头节点。 

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        //初始化新链表的头指针和尾指针,
        //头指针方便返回链表,尾指针方便添加节点
        ListNode *head = nullptr;
        ListNode *tail = nullptr;
        int carry = 0;//进位值
        //当有一个链表没有遍历完就继续计算两数之和
        while(l1 || l2){
            int n1 = l1 ? l1->val : 0;//第一个链表遍历到的节点的值
            int n2 = l2 ? l2->val : 0;//第一个链表遍历到的节点的值
            int sum = n1 + n2 + carry;//计算两个节点的和
            //处理新链表为空时头结点的值
            if(!head){
                head = tail = new ListNode(sum % 10);
            }
            else{
                //在尾指针后继位置创造新节点,节点的值是两数之和与10的余数
                tail->next = new ListNode(sum % 10);
                tail = tail->next;
            }
            carry = sum / 10;//计算进位值
            if(l1){
                l1 = l1->next;
            }
            if(l2){
                l2 = l2->next;
            }
        }
        //如果还有进位值,就将其存入新的节点中
        if(carry > 0){
            tail->next = new ListNode(carry);
        }
        return head;
    }
};
  • 时间复杂度:O(max(m,n))
  • 空间复杂度:O(1)

http://www.kler.cn/a/452625.html

相关文章:

  • mac_录屏
  • FFmpeg来从HTTP拉取流并实时推流到RTMP服务器
  • 网络安全加密
  • 计算机毕业设计Python+Spark知识图谱酒店推荐系统 酒店价格预测系统 酒店可视化 酒店爬虫 酒店大数据 neo4j知识图谱 深度学习 机器学习
  • 关于科研中使用linux服务器的集锦
  • 内部知识库的未来展望:技术融合与用户体验的双重升级
  • 网络安全等级自我评价
  • 卷积神经网络入门指南:从原理到实践
  • 国产云厂商数据库产品--思维导图
  • [1111].集成开发工具Pycharm安装与使用
  • 【EtherCATBasics】- KRTS C++示例精讲(2)
  • Docker完整技术汇总
  • 力扣48.旋转图像
  • 物联网网络中的设备认证方法
  • 论文阅读--Variational quantum algorithms
  • 矩阵链乘法【东北大学oj数据结构10-2】C++
  • GitLab的卸载与重装
  • 信息安全管理与评估赛题第10套
  • Windows 远程桌面连接Ubuntu Desktop
  • 以下matlab文件因包含语法错误而未添加
  • 2023年厦门市第30届小学生C++信息学竞赛复赛上机操作题(三、2023C. 太空旅行(travel))
  • js创建对象的方式
  • 【网络安全零基础入门】PHP环境搭建、安装Apache、安装与配置MySQL(非常详细)零基础入门到精通,收藏这一篇就够(01)_php安装配置教程
  • 前端跨域问题--解析与实战
  • springboot整合Elasticsearch介绍
  • 【C++】优先级队列以及仿函数