news 2026/6/16 0:53:08

【剑斩OFFER】算法的暴力美学——两数相加

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【剑斩OFFER】算法的暴力美学——两数相加

一、题目描述

二、算法原理

思路:模拟

因为本来我们是要把链表里面的值进行翻转的,但是题目已经帮我们翻转了,所以可以直接进行加法操作就行,不过要考虑进位问题,我们使用一个值 t 来保存这个两个链表加的值,假设 t = 12 ,那么这个最终的结果是:t % 10 = 2,此时进行进位操作: t = t / 10 = 1;然后不断的进行加法运算直到:运算到第一个和第二个链表的最后值,而且当 t != 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) { int t = 0;//进位值 ListNode* newhead = new ListNode(0);//一个新链表的头结点,这个头结点用于返回新链表的第一个值 ListNode* cur1 = l1,*cur2 = l2; ListNode* prev = newhead;//链表的最后一个结点,用于链接加入的值 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 = t / 10;//保存进位值 } return newhead->next; } };

代码探索:

/** * 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* phead = new ListNode; phead->next = nullptr; ListNode* cur1 = l1,*cur2 = l2; ListNode* phead_tmp = phead; int tmp = 0; while(cur1 != nullptr && cur2 != nullptr) { tmp += cur1->val + cur2->val; ListNode* node = new ListNode; node->val = tmp % 10; node->next = nullptr; phead_tmp->next = node; phead_tmp = node; node = nullptr; tmp /= 10; cur1 = cur1 -> next; cur2 = cur2 -> next; } while(cur1 != nullptr) { tmp += cur1->val; ListNode* node = new ListNode; node->val = tmp % 10; node->next = nullptr; phead_tmp->next = node; phead_tmp = node; node = nullptr; tmp /= 10; cur1 = cur1->next; } while(cur2 != nullptr) { tmp += cur2->val; ListNode* node = new ListNode; node->val = tmp % 10; node->next = nullptr; phead_tmp->next = node; phead_tmp = node; node = nullptr; tmp /= 10; cur2 = cur2->next; } if(tmp) { ListNode* node = new ListNode; node->val = tmp; node->next = nullptr; phead_tmp->next = node; node = nullptr; } return phead->next; } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/13 1:26:45

Whisper大模型极速版:8倍速语音识别革新你的工作流程

Whisper大模型极速版:8倍速语音识别革新你的工作流程 【免费下载链接】whisper-large-v3-turbo 项目地址: https://ai.gitcode.com/hf_mirrors/openai/whisper-large-v3-turbo 还在为会议录音转写耗费数小时而焦虑吗?whisper-large-v3-turbo语音…

作者头像 李华
网站建设 2026/6/14 7:54:44

用户评价征集:鼓励已购客户留下真实反馈

TensorFlow 深度解析:工业级机器学习平台的工程实践与应用价值 在人工智能技术加速落地的今天,企业不再满足于“模型能跑通”,而是更关心“系统是否稳定、可维护、能持续迭代”。这种从“实验导向”向“生产导向”的转变,使得深度…

作者头像 李华
网站建设 2026/6/15 14:54:31

定时任务调度:CronJob驱动每日TensorFlow批处理

定时任务调度:CronJob驱动每日TensorFlow批处理 在企业级AI系统的日常运维中,一个看似简单却至关重要的问题反复浮现:如何确保模型不会“过期”? 数据每天都在变化——用户行为在演进、市场趋势在迁移、异常模式在变异。如果模型…

作者头像 李华
网站建设 2026/6/13 0:04:39

【性能提升20倍的秘密】:Open-AutoGLM 动态图优化背后的黑科技

第一章:Open-AutoGLM 技术原理Open-AutoGLM 是一个面向自动化任务生成与执行的开源大语言模型框架,其核心在于结合了生成式语言建模与动态任务解析能力。该框架通过语义理解模块、任务规划引擎和执行反馈闭环,实现对复杂用户指令的自动拆解与…

作者头像 李华
网站建设 2026/6/13 7:30:10

SeedVR2视频修复终极指南:10分钟快速上手本地化AI增强

SeedVR2视频修复终极指南:10分钟快速上手本地化AI增强 【免费下载链接】SeedVR2-7B 项目地址: https://ai.gitcode.com/hf_mirrors/ByteDance-Seed/SeedVR2-7B 还在为模糊的老视频、低质量的监控录像或者AI生成的粗糙视频而烦恼吗?想要在本地环境…

作者头像 李华
网站建设 2026/6/15 12:01:35

RedisInsight深度体验:解锁Redis可视化管理新境界

RedisInsight深度体验:解锁Redis可视化管理新境界 【免费下载链接】RedisInsight Redis GUI by Redis 项目地址: https://gitcode.com/GitHub_Trending/re/RedisInsight RedisInsight作为Redis官方推出的免费桌面客户端,为开发者提供了前所未有的…

作者头像 李华