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

【C++算法】51.链表_两数相加

文章目录

  • 链表常见技巧和操作总结
    • 1. 常用技巧
    • 2. 链表中的常用操作
    • 题目链接:
    • 题目描述:
    • 解法
    • C++ 算法代码:


链表常见技巧和操作总结

1. 常用技巧

  1. 画图 --> 直观,形象,便于理解
  2. 引入虚拟头节点
    1. 便于处理边界情况
    2. 方便我们对链表进行操作
  3. 不要吝啬空间,大胆去定义变量
  4. 快慢双指针
    1. 判断链表中是否有环
    2. 链表中环的入口
    3. 找链表中倒数第n个结点

2. 链表中的常用操作

  1. 创建一个新结点 new
  2. 尾插
  3. 头插

题目链接:

2. 两数相加


题目描述:

40a4a36ad0acb7cb1b9b095460ad3f78


解法

模拟两数相加的原理即可。

fe906e0ddd82a85e169f0aaeb69798ff

4b82d817ade9ef0d3e5b17846e09d845

6ebe53bc424741137dd76d9e828656cb

275f6ba549d4c40584ada9c2ba020899


C++ 算法代码:

/**
 * 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* cur1 = l1, *cur2 = l2;  // 初始化两个指针分别指向两个链表的头节点
        ListNode* newhead = new ListNode(0); // 创建一个虚拟头结点,记录最终结果
        ListNode* prev = newhead; // 尾指针,用于构建结果链表
        int t = 0; // 记录进位
        
        // 循环直到两个链表都遍历完且没有进位
        while(cur1 || cur2 || t)
        {
            // 先加上第一个链表的当前节点值
            if(cur1)
            {
                t += cur1->val;  // 累加当前节点的值
                cur1 = cur1->next;  // 移动到下一个节点
            }
            
            // 加上第二个链表的当前节点值
            if(cur2)
            {
                t += cur2->val;  // 累加当前节点的值
                cur2 = cur2->next;  // 移动到下一个节点
            }
            
            // 创建新节点,值为当前和的个位数
            prev->next = new ListNode(t % 10);  // 取余数作为当前位的值
            prev = prev->next;  // 移动尾指针
            t /= 10;  // 计算进位值
        }

        // 保存结果链表的头节点(跳过虚拟头节点)
        prev = newhead->next;
        delete newhead;  // 释放虚拟头节点的内存
        return prev;  // 返回结果链表
    }
};
http://www.dtcms.com/a/120046.html

相关文章:

  • 【论文粗读】Multi-scale Neighbourhood Feature Interaction Network
  • ruby高级语法
  • Linux命令学习
  • export default function?在react中在前面还是后面呢?
  • node.js之path常用方法
  • 模仿axios的封装效果来封装fetch,实现baseurl超时等
  • 批量将图片转换为 jpg/png/Word/PDF/Excel 等其它格式
  • 【ROS 通信】Services 服务通信
  • pinia中不定义state和action也能正常使用属性和方法
  • [Effective C++]条款28:避免返回handles指向对象内部成分
  • AI 智能外呼系统的智能体现
  • Python语言的网络编程
  • 大模型FAQ
  • C++-Mongoose(2)-https-server-openssl
  • Java核心技术面试题
  • micro ubuntu 安装教程
  • 【亲测】Linux 使用 Matplotlib 显示中文
  • Solidity入门实战—web3
  • 【Ansible自动化运维】一、初步了解,开启自动化运维之旅
  • STM32定时器完全指南:从基础原理到高级应用 | 零基础入门STM32第九十六步
  • 海外高防服务器延迟优化——跨国业务安全加速的底层逻辑
  • DIY AI ML:K-Means 算法
  • HTML静态网页成品作业(HTML+CSS)——阜阳剪纸介绍设计制作(1个页面)
  • R语言 | 2d概率密度分布图
  • 牛客 226303 【模板】差分
  • SPI通信
  • 重头学java cpu内存硬盘的关系
  • 深度集成学习不均衡样本图像分类
  • Java Functional Interface 函数式接口
  • 大文件断点续传