【优选算法专栏】专题九:链表--------两数之和

简介: 【优选算法专栏】专题九:链表--------两数之和


题目来源

本题来源为:

Leetcode2.两数之和

题目描述:

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

题目解析

分析题目:就是两个数相加的过程,只是换成了在链表中进行加减操作。

例如下面这个例子:

注意:因为传的是逆序。而加法操作正好是从低位开始,所以逆序会方便我们的操作。最后要将结果变成逆序输出即可。

算法原理

本题的算法原理很简单,其实就是模拟一下两数相加的过程。

首先为了方便,我们先定义一个虚拟头节点。

其次定义两个指针分别指向两个链表的头节点,定义一个新的变量t来进行一个进位操作,然后模拟两数相加的过程。

注意:计算结果保存在t变量中,是将这个结果的个位放在链表中。

代码实现

/**
 * 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;
        ListNode*cur2=l2;
        //创建一个虚拟头节点,记录最终结果
        ListNode*newnode =new ListNode(0);
        ListNode*prev=newnode;//尾指针
        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=newnode->next;
        delete  newnode;
        return prev;
    }
};
相关文章
|
6月前
|
存储 算法 物联网
解析局域网内控制电脑机制:基于 Go 语言链表算法的隐秘通信技术探究
数字化办公与物联网蓬勃发展的时代背景下,局域网内计算机控制已成为提升工作效率、达成设备协同管理的重要途径。无论是企业远程办公时的设备统一调度,还是智能家居系统中多设备间的联动控制,高效的数据传输与管理机制均构成实现局域网内计算机控制功能的核心要素。本文将深入探究 Go 语言中的链表数据结构,剖析其在局域网内计算机控制过程中,如何达成数据的有序存储与高效传输,并通过完整的 Go 语言代码示例展示其应用流程。
114 0
|
7月前
|
存储 监控 算法
员工电脑监控系统中的 C# 链表算法剖析-如何监控员工的电脑
当代企业管理体系中,员工电脑监控已成为一个具有重要研究价值与实践意义的关键议题。随着数字化办公模式的广泛普及,企业亟需确保员工对公司资源的合理利用,维护网络安全环境,并提升整体工作效率。有效的电脑监控手段对于企业实现这些目标具有不可忽视的作用,而这一过程离不开精妙的数据结构与算法作为技术支撑。本文旨在深入探究链表(Linked List)这一经典数据结构在员工电脑监控场景中的具体应用,并通过 C# 编程语言给出详尽的代码实现与解析。
120 5
|
8月前
|
存储 机器学习/深度学习 算法
C 408—《数据结构》算法题基础篇—链表(下)
408考研——《数据结构》算法题基础篇之链表(下)。
210 30
|
8月前
|
存储 算法 C语言
C 408—《数据结构》算法题基础篇—链表(上)
408考研——《数据结构》算法题基础篇之链表(上)。
356 25
|
8月前
|
存储 监控 算法
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
在数字化办公时代,公司监控上网软件成为企业管理网络资源和保障信息安全的关键工具。本文深入剖析C++中的链表数据结构及其在该软件中的应用。链表通过节点存储网络访问记录,具备高效插入、删除操作及节省内存的优势,助力企业实时追踪员工上网行为,提升运营效率并降低安全风险。示例代码展示了如何用C++实现链表记录上网行为,并模拟发送至服务器。链表为公司监控上网软件提供了灵活高效的数据管理方式,但实际开发还需考虑安全性、隐私保护等多方面因素。
133 0
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
|
11月前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
11月前
|
存储 Web App开发 算法
2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构之单双链表按位、值查找;[前后]插入;删除指定节点;求表长、静态链表等代码及具体思路详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
存储 缓存 算法
经典算法之链表篇(三)
经典算法之链表篇(三)
173 4
|
算法
经典算法之链表篇(二)
经典算法之链表篇(二)
176 4
|
算法 索引
经典算法之链表篇
经典算法之链表篇
130 4

热门文章

最新文章