编写一个用单链表实现非负大整数的加法运算的程序。测试输入,每两行表示一个大整数,第一行是整数位数,第二行是整数各个数位: 5 1 2 3 4 5 3 4 5 6 预期输出: 1 2 8 0 1
时间: 2024-11-22 12:43:25 浏览: 18
编写一个使用单链表实现非负大整数加法的程序,首先需要创建一个节点结构,用于存储数字,并维护两个链表分别代表两个输入的大整数。然后我们需要遍历这两个链表,逐位相加并将结果存入新的链表中,同时处理进位。下面是一个Python版本的示例:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def add_two_numbers(l1_head, l2_head):
dummy_node = ListNode(0) # 创建虚拟头节点
current = dummy_node
carry = 0 # 进位标志
while l1_head or l2_head: # 当两个链表至少有一个还有剩余
if l1_head:
carry += l1_head.val
l1_head = l1_head.next
if l2_head:
carry += l2_head.val
l2_head = l2_head.next
# 将当前节点的值加上进位后的结果
current.next = ListNode(carry % 10)
carry //= 10
current = current.next
# 如果最后有进位,添加到链表的末尾
if carry > 0:
current.next = ListNode(carry)
return dummy_node.next # 返回实际的第一个数字节点作为结果
# 测试部分
# 输入1: 12345 (5位)
l1 = [ListNode(int(x)) for x in '12345']
l1_head = ListNode()
for node in l1:
l1_head.next = node
l1_head = l1_head.next
# 输入2: 456 (3位)
l2 = [ListNode(int(x)) for x in '456']
l2_head = ListNode()
for node in l2:
l2_head.next = node
l2_head = l2_head.next
# 计算结果并打印
result = add_two_numbers(l1_head, l2_head)
while result:
print(result.val, end=' ')
result = result.next
print("\n预期输出:1 2 8 0 1")
```
这个程序实现了两个非负大整数的链表形式相加,输出了预期的结果。运行上述代码即可验证功能是否正常。
阅读全文