当前位置: 首页 > 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;  // 返回结果链表
    }
};

相关文章:

  • 【论文粗读】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第九十六步
  • .net商城网站开发/百度seo推广
  • 天津专业做网站/网站推广方案范文
  • 响应式网站导航栏模板/浙江网站推广公司
  • 芜湖学校网站建设电话/最新的疫情最新消息
  • ps做网站像素大小/淮南网站seo
  • 用群晖做网站/厦门百度广告