Pythonのアルゴリズムの古典的な面接の質問1.3:2つの表現のリストとの数を計算する方法

免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/qq_38727847/article/details/102770572

タイトルは一つのカテゴリに集め、「Pythonプログラマのインタビュー算数の本、」私はこの本の主題に毎日やるとそれを共有しましょう、私のブログに置か統一、から取られています。

1.2の逆の順序でリンクリストを実装する方法
[Huawei社]ペンの質問

難易度係数:⭐⭐⭐
研究周波数:⭐⭐⭐⭐

件名の説明:

2つのリンクされたリストは、リスト番号を表す各ノードを与えられ、2つの数値を算出します。例えば:入力リスト(3 - > 1 - > 5)、リスト(5 - > 9 - > 2)、出力:8 - > 0 - > 8、すなわち、= 808 513 + 298は、注目リスト内の最初の数字こと。

方法:整数追加し
、2つの図は、単一リンクリストを求めて、その後、新しいリストに保存されているほかを完了するために必要に応じて結果を送信した後表します。

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

おすすめ

転載: blog.csdn.net/qq_38727847/article/details/102770572