问题描述
给定两个单链表,链表的每个结点代表一位数,计算两个数的和。例如 :输入链表 (3一>1一> 5)和链表(5一>9一> 2),输出 :8->0->8,即 513+295 =808,注意个位数在链表头。
class Node:
def __init__(self, data=None, next=None):
self.data = data
self.next = next
def print_link(head):
cur = head.next
while cur.next != None:
print(cur.data, end=' ')
cur = cur.next
print(cur.data)
def print_str(head):
cur = head.next
f = 1
while cur.next != None:
if f and cur.data != 0:
print(cur.data, end='')
f = 0
elif f == 0:
print(cur.data, end='')
cur = cur.next
print(cur.data)
def con_link(nums):
head = Node()
cur = head
for num in nums:
node = Node(num)
cur.next = node
cur = node
return head
def min_compute(p1, p2, p3):
f = 0
while p1:
res = p1.data + p2.data + f
if res < 10:
p3.data = res
f = 0
else:
p3.data = res % 10
f = 1
p1 = p1.next
p2 = p2.next
p3 = p3.next
while p2:
res = p2.data + f
if res < 10:
p3.data = res
f = 0
else:
p3.data = res % 10
f = 1
p2 = p2.next
p3 = p3.next
if f == 1:
p3.data = f
def reverse_link(head):
if head.next == None or head == None:
return
pre = head.next
cur = head.next.next
pre.next = None
while cur.next != None:
next = cur.next
cur.next = pre
pre = cur
cur = next
cur.next = pre
head.next = cur
print_str(head)
def compute(head1, head2, length1, length2):
p1 = head1.next
p2 = head2.next
nums = [0 for i in range(max(length1, length2) + 1)]
head3 = con_link(nums)
p3 = head3.next
if length2 >= length1:
min_compute(p1, p2, p3)
else:
min_compute(p2, p1, p3)
reverse_link(head3)
if __name__ == '__main__':
s1 = input("link1>>:")
nums1 = list(map(int, s1.split(' ')))
length1 = len(nums1)
s2 = input("link2>>:")
nums2 = list(map(int, s2.split(' ')))
length2 = len(nums2)
link1 = con_link(nums1)
link2 = con_link(nums2)
print_link(link1)
print_link(link2)
compute(link1, link2, length1, length2)
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步