题目: 给出两个非空的链表用来表示两个非负的整数,其中两个数字,按个位-十位-百位-千位…逆序存储
这两个数相加,得到一个新的链表表示他们的和。
例如:
输入:(1->2-4)+(8->1->2)
输出:9->3->6
分析思路: 【leetcode 链表求和】链表按位求和
需要考虑加法进位,相同位进位,最高位进位
相同长度链表、不同长度链表
代码:
package org.example.link;
/**
* 2-3-3
* 5-8-4
* 332+485=817
*
* 332+85=417
*
* 32+85=117
*/
public class LinkAdd {public static Node add(Node nodeFirst,Node nodeSecond){
Node headNode = new Node(0);
Node currNode = headNode;
int carry = 0;
while (nodeFirst!=null||nodeSecond!=null){
int x = (nodeFirst !=null) ? nodeFirst.value:0;
//如果高位为空,则加0
int y = (nodeSecond !=null) ? nodeSecond.value:0;
int sum = carry+x+y;
//当前位相加,同时加上上一位的进位
int curr = sum%10;
Node node = new Node(curr);
carry = sum/10;
currNode.next = node;
currNode = node;
if(nodeFirst!=null) nodeFirst = nodeFirst.next;
if(nodeSecond!=null) nodeSecond = nodeSecond.next;
}
// 如果最高位求和还有进位
if(carry>0){
currNode.next = new Node(1);
}return headNode;
}public static void main(String[] args) {Node nodeFirst = new Node(2);
nodeFirst.next=new Node(3);
//nodeFirst.next.next=new Node(3);
Node nodeSecond = new Node(5);
nodeSecond.next=new Node(8);
//nodeSecond.next.next=new Node(4);
Node result = add(nodeFirst,nodeSecond);
result= result.next;
while (result!=null){
System.out.println(result.value);
result = result.next;
}}
}package org.example.link;
public class Node {
int value;
public Node(int i){
value = https://www.it610.com/article/i;
}
Node next;
}
推荐阅读
- 人工智能|干货!人体姿态估计与运动预测
- 分析COMP122 The Caesar Cipher
- 技术|为参加2021年蓝桥杯Java软件开发大学B组细心整理常见基础知识、搜索和常用算法解析例题(持续更新...)
- C语言学习(bit)|16.C语言进阶——深度剖析数据在内存中的存储
- Python机器学习基础与进阶|Python机器学习--集成学习算法--XGBoost算法
- 数据结构与算法|【算法】力扣第 266场周赛
- 数据结构和算法|LeetCode 的正确使用方式
- leetcode|今天开始记录自己的力扣之路
- 人工智能|【机器学习】深度盘点(详细介绍 Python 中的 7 种交叉验证方法!)
- 网络|简单聊聊压缩网络