给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照顺序的方式存储的,并且每个节点只能存储一位数字。 请你将两个数相减,并以相同形式返回一个表示相减结果的链表。 你可以假设 1)除了数字 0 之外,这两个数都不会以 0 开头。 2)给定的第一个数字一定比第二个数字大。 举例: 输入:l1 = [9,8,7], l2 = [5,1,2] 输出:[4,7,5] 解释:987-512 = 475.
时间: 2023-08-22 09:47:04 浏览: 73
好的,这是一道链表的题目,我会尽力给你讲解。我们可以先将两个链表转换为数字,然后相减得到结果,最后再将结果转换为链表。具体实现步骤如下:
1. 遍历两个链表,将链表中的数字转换成整数,存储在两个变量 a 和 b 中。
2. 计算 a - b 的值,得到结果 c。
3. 将 c 转换为链表形式,存储在新的链表中。实现过程中需要注意进位的情况。
下面是代码实现:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def subtract_lists(l1: ListNode, l2: ListNode) -> ListNode:
# 将链表转换为数字
a = 0
while l1:
a = a * 10 + l1.val
l1 = l1.next
b = 0
while l2:
b = b * 10 + l2.val
l2 = l2.next
# 计算差值
c = a - b
# 将差值转换为链表
if c == 0:
return ListNode(0)
result = None
while c > 0:
digit = c % 10
node = ListNode(digit)
node.next = result
result = node
c //= 10
return result
```
以上代码可以通过以下测试用例进行验证:
```python
l1 = ListNode(9, ListNode(8, ListNode(7)))
l2 = ListNode(5, ListNode(1, ListNode(2)))
result = subtract_lists(l1, l2)
while result:
print(result.val, end='')
result = result.next
```
输出结果为:475
阅读全文