给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照顺序的方式存储的,并且每个节点只能存储一位数字。 请你将两个数相减,并以相同形式返回一个表示相减结果的链表。 你可以假设 1)除了数字 0 之外,这两个数都不会以 0 开头。 2)给定的第一数字一定比第二个数字大。
时间: 2023-08-22 10:41:39 浏览: 74
好的,我来回答这个问题。我们可以先将两个链表转换成数字,然后将它们相减,最后将结果转换成链表。下面是Java代码实现:
```Java
public class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}
public ListNode subtract(ListNode l1, ListNode l2) {
int num1 = 0;
int num2 = 0;
while (l1 != null) {
num1 = num1 * 10 + l1.val;
l1 = l1.next;
}
while (l2 != null) {
num2 = num2 * 10 + l2.val;
l2 = l2.next;
}
int diff = num1 - num2;
ListNode dummy = new ListNode(0);
ListNode cur = dummy;
if (diff == 0) {
return new ListNode(0);
} else {
while (diff != 0) {
cur.next = new ListNode(diff % 10);
diff /= 10;
cur = cur.next;
}
}
return dummy.next;
}
```
在这个代码中,我们首先遍历两个链表,将它们转换成数字 num1 和 num2。然后我们计算它们的差值 diff,如果 diff 为 0,说明两个链表表示的数字相等,我们直接返回一个值为 0 的节点即可。否则,我们将 diff 转换成链表形式,从低位到高位遍历 diff,每次取出它的个位上的数字,将其插入到新链表的尾部即可。
阅读全文