用Java代码实现给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照顺序的方式存储的,并且每个节点只能存储一位数字。 请你将两个数相减,并以相同形式返回一个表示相减结果的链表。 你可以假设 1)除了数字 0 之外,这两个数都不会以 0 开头。 2)给定的第一数字一定比第二个数字大。
时间: 2023-08-22 11:41:13 浏览: 79
好的,下面是Java代码实现:
```java
public ListNode subtractLinkedList(ListNode l1, ListNode l2) {
ListNode dummy = new ListNode(0);
ListNode curr = dummy;
int carry = 0;
while (l1 != null || l2 != null) {
int val1 = l1 != null ? l1.val : 0;
int val2 = l2 != null ? l2.val : 0;
int diff = val1 - val2 - carry;
carry = diff < 0 ? 1 : 0;
curr.next = new ListNode(diff < 0 ? diff + 10 : diff);
curr = curr.next;
if (l1 != null) l1 = l1.next;
if (l2 != null) l2 = l2.next;
}
if (carry == 1) curr.next = new ListNode(1);
return dummy.next;
}
```
这段代码中,我们使用了一个虚拟头节点`dummy`来简化链表操作。我们用`curr`指针来指向当前节点,并将当前节点的值设为`diff`的个位数。如果`diff`小于0,则需要进位,将`carry`设为1。如果两个链表长度不同,则其中一个链表的值为0。最后,如果最高位有进位,则需要在链表的末尾添加一个值为1的节点。
阅读全文