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

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


题目来源

本题来源为:

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;
    }
};
相关文章
|
20天前
|
存储 算法 C语言
【数据结构与算法 刷题系列】合并两个有序链表
【数据结构与算法 刷题系列】合并两个有序链表
|
19天前
|
算法 Java
Java数据结构与算法:双向链表
Java数据结构与算法:双向链表
|
19天前
|
算法 Java
Java数据结构与算法:循环链表
Java数据结构与算法:循环链表
|
20天前
|
算法
【数据结构与算法 刷题系列】求带环链表的入环节点(图文详解)
【数据结构与算法 刷题系列】求带环链表的入环节点(图文详解)
|
20天前
|
算法
【数据结构与算法 刷题系列】判断链表是否有环(图文详解)
【数据结构与算法 刷题系列】判断链表是否有环(图文详解)
|
20天前
|
算法
【数据结构与算法 经典例题】随机链表的复制(图文详解)
【数据结构与算法 经典例题】随机链表的复制(图文详解)
|
20天前
|
算法 C语言
【数据结构与算法 经典例题】链表的回文结构(图文详解)
【数据结构与算法 经典例题】链表的回文结构(图文详解)
|
20天前
|
算法
【数据结构与算法 经典例题】反转链表(图文详解)
【数据结构与算法 经典例题】反转链表(图文详解)
|
20天前
|
算法 C语言
【数据结构与算法 经典例题】相交链表求交点
【数据结构与算法 经典例题】相交链表求交点
|
20天前
|
算法
【数据结构与算法 刷题系列】移除链表元素
【数据结构与算法 刷题系列】移除链表元素