两数相加
时间:2021-07-14
本文章向大家介绍 两数相加,主要包括 两数相加使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
两数相加
问题描述:
给你两个非空链表,表示两个非负整数。他们的每位数字都是按照逆序方式储存,且每个节点只能储存一位数。
请你将两个数相加,并以相同形式返回一个表示和的链表。
![img](file:///C:\Users\86130\Documents\Tencent Files\2909692915\Image\C2C\HGPQS%6S5LZIBU6]$E@W@ML.png)
输入:L1 = [2,4,3],L2 = [5.6.4]
输出:[7,0,8]
解释:342 + 465 = 807
代码实现(C++)
#include<iostream>
#include<list>
#include<iterator>
using namespace std;
class solution
{
public:
void input();//输入数字,存入链表
void polishing();//补齐链表
void count();//求和
void output();//输出结果
private:
int size1;//链表L1的节点
int size2;//链表L2的节点
list<int> L1;//L1存放的数据类型是int型
list<int> L2;
list<int> result;//结果链表存放的数据类型是int
};
//输入
void solution::input()
{
int input1;
int input2;
cin>>size1;
for(int i = 0;i < size1;i++)
{
cin>>input1;
L1.push_back(input1);//push_back:将input1加到L1当前最后一个元素的下一个元素
}
cin>>size2;
for(int i = 0;i < size2;i++)
{
cin>>input2;
L2.push_back(input2);
}
}
//补齐链表
void solution::polishing()
{
int temp;
//L1比L2长,在L2后面补0
if(L1.size() > L2.size())
{
temp = L1.size() - L2.size();
for(int i = 0;i < temp;i++)
{
L2.push_back(0);
}
}
//L2比L1长,在L1后面补0
if(L1.size() < L2.size())
{
temp = L2.size() - L1.size();
for(int i = 0;i < temp;i++)
{
L1.push_back(0);
}
}
}
//求和
void solution::count()
{
int temp2;
int add=0;//进位
////iterator:检查容器内元素并遍历元素的数据类型
list<int>::iterator iter1 = L1.begin();//.begin();返回指向容器 最开始位置数据的指针
list<int>::iterator iter2 = L2.begin();
for(; iter1 != L1.end(); iter1++)//.end();返回指向容器最后一个数据单元+1的指针
{
//进位
if( (*iter1) + (*iter2) + add >= 10)
{
temp2 = (*iter1) + (*iter2) + add;
result.push_back(temp2);
add = 1;
}
//没有进位
if( (*iter1) + (*iter2) + add < 10)
{
temp2 = (*iter1) + (*iter2) + add;
result.push_back(temp2);
add = 0;
}
iter2++;
}
}
//输出结果
void solution::output()
{
for(list<int>::iterator iter = result.begin(); iter != result.end(); iter++)
{
cout<<*iter;
}
}
int main()
{
solution s;
s.input();//输入数字,存入链表
s.polishing();//补齐链表
s.count();//求和
s.output();//输出结果
return 0;
}
Java (1)
//链表初始化
public node addTwoNumbers(node l1, node l2) {
node node1 = l1;
node node2 = l2;
//node1、node2不为空时进入循坏
while (node1 != null)
{
if (node2 != null){
node1.data += node2.data;//node1.data=node1.data+node2.data
node2 = node2.next;//node2移到下一结点
}
//如果node1的下一结点为空且node2的下一结点不为空
if (node1.next == null && node2!=null){
node1.next = node2;//node1的下一结点等于node2
}
node1 = node1.next;//node1移到下一结点
}
return node1;//返回node1
}
public void marge(node node)
{
//node不为空时
while (node != null){
//node的数据大于10
if (node.data >= 10){
//进位
node.data = node.data%10;
if (node.next == null)//如果node的下一结点为空
{
//node的下一结点等于0
node.next = new node(0);
}
node.next.data +=1;//node的下一结点等于0+1
}
}
}
public node addTwoNumbers2(node l1, node l2) {
//声明
node pre = new node(0);
node cur = pre;
int carry = 0;
//L1、L2不为空时进入循坏
while(l1 != null || l2 != null) {
int x = l1 == null ? 0 : l1.data;//L1为空则返回0赋给x,否则返回L1的数据
int y = l2 == null ? 0 : l2.data;//L2为空则返回0赋给y,否则返回L2的数据
int sum = x + y + carry;
carry = sum / 10;//进位数等于0或1
sum = sum % 10;
cur.next = new node(sum);//cur的下一结点等于sum
cur = cur.next;
if(l1 != null) //如果L1为空
l1 = l1.next;//指向下一结点
if(l2 != null)//如果L2为空
l2 = l2.next;//指向下一结点
}
//进位了
if(carry == 1) {
cur.next = new node(carry);
}
return pre.next;
}
Java(2)
//static是一个修饰符,用于修饰类的成员方法、类的成员变量,它修饰的方法称为静态方法
static node head = null;//节点指针域
static node tem = null;//节点指针域
class node {
int data; //节点数据域
node next = null; //节点指针域
public node(int data) {
this.data = data; //当构造一个新的节点的时候,顺便给节点进行初始化
}
}
public void addNode(int d){
node N = new node(d);
//如果头结点为空
if(head==null){
head = N;//把N赋给头结点
return; /*由于每次是增加一个节点,所以对头结点进行初始化之后就要退出函数*/
}
tem = head; /*一般一个链表的头结点是不能动的,因此需要把头结点赋值给一个临时变量
这样在对链表进行访问的时候,就可以用这个临时变量进行逐个的访问,不对头结点产生影响*/
//如果tem的下一结点不为空
while(tem.next!=null){
tem = tem.next;//移到下一结点
}
tem.next = N;//N赋给tem的下一结点
}
原文地址:https://www.cnblogs.com/l574/p/15010512.html
- 代码实现WordPress点击进入随机一篇文章的方法
- UE4新手编程之创建空白关卡和添加碰撞体
- Office Web Apps
- hadoop: hive 1.2.0 在mac机上的安装与配置
- ASP.NET 5运行时升级到Beta5
- WordPress免插件仅代码实现“返回顶部、返回底部、评论”效果(样式二)
- jQuery/asp.net mvc DateTime 的处理
- WordPress主题下funtions.php的一段“恶意”代码
- eclipse/intellij idea 远程调试hadoop 2.6.0
- Jexus 5.8.2 正式发布为Asp.Net Core进入生产环境提供平台支持
- 区块链技术发展前景可观,银链原子链已开始投入正常交易
- 分布式服务框架 dubbo/dubbox 入门示例
- SmtpClient发送邮件遭遇The specified string is not in the form required for a subject.
- 彻底解决WordPress 中 半角全角字符转义 的问题
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Apache vhost配置
- win10使用WSL 2运行Docker Desktop,运行文件从C盘迁移到其他目录
- htaccess简介和16个小技巧
- Nginx禁止指定目录运行PHP脚本
- 机器学习数学笔记|偏度与峰度及其 python 实现
- ABP(ASP.NET Boilerplate Project)快速入门
- IdentityServer4 4.x版本 配置Scope的正确姿势
- 个人总结的部分数据验证规则
- 一句话实现php日期转中文汉字
- .Net Core微服务入门全纪录(八)——Docker Compose与容器网络
- PHP中少用但是很好用的方法
- 使用一维数据构造简单卷积神经网络
- .Net Core微服务入门全纪录(完结)——Ocelot与Swagger
- PHP使用GD库生成文件
- 反向传播算法从原理到实现