python经典面试算法题1.3:如何计算两个单链表所代表的数之和

本题目摘自《Python程序员面试算法宝典》,我会每天做一道这本书上的题目,并分享出来,统一放在我博客内,收集在一个分类中。

1.2 如何实现链表的逆序
【华为笔试题】

难度系数:⭐⭐⭐
考察频率:⭐⭐⭐⭐

题目描述:

给定两个单链表, 链表的每个结点代表一位数,计算两个数的和。例如:输入链表(3 -> 1 -> 5)和链表(5 -> 9 -> 2), 输出:8 -> 0 -> 8, 即 513 + 295 = 808,注意个位数在链表头。

方法一:整数相加
把两个单链表的所代表的数字求出来,然后相加完成之后再把结果按照要求存入到一个新的链表中。

class Node:  # 定义一个结点类
    def __init__(self, data=None):
        self.data = data
        self.next = None

number1 = [5, 1, 3]
number2 = [2, 9, 5]
p = q =None
for index in range(-1, -len(number1)-1, -1):  # 构造两个链表存放513和295
    if index == -1:
        num1 = Node(number1[index])
        num2 = Node(number2[index])
        p = num1
        q = num2
        continue
    p.next = Node(number1[index])
    p = p.next
    q.next = Node(number2[index])
    q = q.next


# 方法一:整数相加
def add(number_1, number_2):  # 传入的是两链表的第一个结点
    p = number_1
    q = number_2
    n1 = 0  # 用来存放第一个整数
    i = 0
    while p is not None:  # 得到第一个数字的值
        n1 += p.data * 10**i
        i += 1
        p = p.next

    n2 = 0  # 用来存放第二个整数
    i = 0
    while q is not None:  # 得到第二个数字的值
        n2 += q.data * 10**i
        i += 1
        q = q.next

    sum = n1 + n2  # 得到两个整数的和
    sum_str = str(sum)  # 把结果转成字符串
    for index in range(-1, -len(sum_str)-1, -1):  # 倒序把结果以整型格式存入到链表中
        if index == -1:  # 第一个数字
            head = Node(int(sum_str[index]))
            temp = head
            continue
        temp.next = Node(int(sum_str[index]))
        temp = temp.next

    return head  # 返回链表的head



# 查看结果
p = add(num1, num2)
while p is not None:
    print(p.data, end="\t")  # 8 0 8
    p = p.next

posted @ 2019-10-27 19:52  段明  阅读(424)  评论(0编辑  收藏  举报