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)
# 輸出計算結果,將結果鍊錶逆置,從第一的不為0的節點開始輸出
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)
python如何計算兩個單鏈表所代表的數之和
方法一 整數相加法 主要思路 分別遍歷兩個鍊錶 求出兩個鍊錶所代表的整數的值,然後把這兩個整數進 行相加,最後把它們的和用鍊錶的形式表示出來。這種方法的優點是計算簡單,但是有個非 常大的缺點 當鍊表所代表的數很大的時候 超 出 了 long 的表示範圍 就無法使用這種方 法了。主要思路 對鍊錶中的結...
python實現計算兩個單鏈表所代表的數之和
華為筆試 題目描述 給定兩個單鏈表,鍊錶的每個結點代表一位數,計算兩個數的和。例如 輸入鍊錶 3一 1一 5 和鍊錶 5一 9一 2 輸出 8 0 8,即 513 295 808,注意個位數在煉表頭。鍊錶相加法 主要思路 對鍊錶中的結點直接進行相加操作,把相加的和儲存到新的鍊錶中對應 的結 點中,同...
JS 兩數之和 兩個單鏈表
兩數之和 給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。題目給了兩個非空的鍊錶,我們要將...