Java 实现两数相加 - LeetCode 2 - 代码详解和测试
{ "title": "Java 实现两数相加 - LeetCode 2 - 代码详解和测试", "description": "本篇文章深入讲解了 LeetCode 第 2 题 "两数相加" 的 Java 实现,并提供了详细的代码注释和测试用例。通过阅读本文,您可以学习如何使用链表结构进行数字加法操作,并掌握相关算法技巧。", "keywords": "LeetCode, 两数相加, 链表, Java, 算法, 代码详解, 测试用例", "content": "package addTwoNumbers;
//两数相加
public class addTwoNumbers { public static class ListNode { int val; ListNode next; public ListNode() {} public ListNode(int val) { this.val = val; } public ListNode(int val, ListNode next) { this.val = val; this.next = next; } }
public ListNode Solution(ListNode l1, ListNode l2) {
ListNode l3 = new ListNode(-1); //定义一个新链表的头节点l3
ListNode node3 = l3; //定义头节点的副本node3
int ex = 0; //定义一个进位值ex
while (l1 != null || l2 != null){
ListNode nodeNext = new ListNode(-1); //定义node的后继节点
node3.next = nodeNext;
//将l1的val赋值给a
int a = 0;
if (l1 != null){
a = l1.val;
}
//将l2的val赋值给b
int b = 0;
if (l2 != null){
b = l2.val;
}
//将a和b的和赋值给c再加上进位值ex即为放入新链表的和
int c = a + b + ex;
//进行判断;若c >= 10 则产生进位值
if (c >= 10){
c = c - 10;
nodeNext.val = c;
ex = 1;
}else {
nodeNext.val = c;
ex = 0;
}
//以下各节点往后走一步
node3 = node3.next;
if (l1 != null) {
l1 = l1.next;
}
if (l2 != null) {
l2 = l2.next;
}
}
//若循环走完仍然有进位值,则说明最后一位值位10,所以再新建一个尾巴节点值位1
if (ex == 1){
ListNode cur = new ListNode(1);
node3.next = cur;
}
//返回头节点的next域
return l3.next;
}
} public class Main { public static void main(String[] args) { // 创建两个测试链表 addTwoNumbers.ListNode l1 = new addTwoNumbers.ListNode(2); l1.next = new addTwoNumbers.ListNode(4); l1.next.next = new addTwoNumbers.ListNode(3);
addTwoNumbers.ListNode l2 = new addTwoNumbers.ListNode(5);
l2.next = new addTwoNumbers.ListNode(6);
l2.next.next = new addTwoNumbers.ListNode(4);
// 创建addTwoNumbers对象并调用Solution方法
addTwoNumbers solution = new addTwoNumbers();
addTwoNumbers.ListNode result = solution.Solution(l1, l2);
// 输出结果
while (result != null) {
System.out.print(result.val + " ");
result = result.next;
}
}
}
原文地址: https://www.cveoy.top/t/topic/pRkr 著作权归作者所有。请勿转载和采集!