📅  最后修改于: 2023-12-03 15:40:56.228000             🧑  作者: Mango
这是一个使用链表表示的两个数字相加的Java程序。该程序使用链表作为数据结构,进行数字相加运算,实现了对大数的加法操作。这个程序的时间复杂度为O(n),空间复杂度为O(n1+n2),其中n1和n2分别是两个数字的位数。
以下是使用链表表示的两个数字相加的Java程序代码:
class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
public class AddTwoNumbers {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode dummy = new ListNode(0);
ListNode cur = dummy;
int carry = 0;
while(l1 != null || l2 != null || carry != 0) {
int sum = carry;
if(l1 != null) {
sum += l1.val;
l1 = l1.next;
}
if(l2 != null) {
sum += l2.val;
l2 = l2.next;
}
cur.next = new ListNode(sum % 10);
carry = sum / 10;
cur = cur.next;
}
return dummy.next;
}
}
首先定义一个ListNode类,它是链表节点的抽象表示。该类包含一个整型数据val和一个指向下一个节点的指针next。
定义一个AddTwoNumbers类,它包含一个方法addTwoNumbers,用于实现链表表示的两个数字的相加。该方法接受两个链表节点l1和l2作为参数,返回一个链表节点作为结果。
在addTwoNumbers方法中,首先定义一个dummy节点,并将cur指针指向dummy节点。同时定义一个carry变量,初始值为0。
使用while循环,判断l1和l2是否为空,carry是否为0。如果不是,则继续循环。
在循环内,首先将carry赋值给sum变量。然后判断l1和l2是否为空,如果不为空,则将l1和l2节点的值与sum变量相加。然后将l1和l2移动到它们的下一个节点。
然后将sum取模10,得到进位后的当前节点的数值,创建一个新的链表节点,并将当前节点的next指针指向这个新的节点。将sum除以10并赋值给carry变量,得到进位后的值。
将cur指针移动到当前节点的下一个节点。
循环结束后,返回dummy.next表示结果。
使用链表表示的两个数字相加的Java程序是一种非常高效的算法,能够处理大数相加的问题。它的时间复杂度为O(n),空间复杂度为O(n1+n2),能够满足绝大多数实际应用的需要。