파이썬 알고리즘 고전적인 면접 질문 1.3 : 두 개의 단일 목록 표시 및 숫자의를 계산하는 방법

면책 조항 :이 문서는 블로거 원본입니다, 추적 에 의해-SA의 CC 4.0 저작권 계약, 복제, 원본 소스 링크이 문을 첨부 해주세요.
이 링크 : https://blog.csdn.net/qq_38727847/article/details/102770572

제목은에서 가져온 것입니다 "파이썬 프로그래머 인터뷰 산술 책,"나는이 책의 주제에 매일을하고 그것을 공유 할, 하나 개의 범주에서 수집, 내 블로그에 저장 통합.

1.2의 역순으로 연결리스트 구현하는 방법
[화웨이] 펜 질문

난이도 계수 : ⭐⭐⭐
연구 주파수 : ⭐⭐⭐⭐

주제 설명 :

두 개의 단일 연결리스트, 목록 번호를 나타내는 각 노드를 감안할 때, 두 개의 숫자를 계산합니다. 예를 들어, 입력리스트 (3 -> 1 -> 5),리스트 (5 -> 9 -> 2), 출력 : 8 -> 0 -> 8, 즉, = 808 (513) + (298)는, 주목리스트의 첫 번째 자리있다.

방법 A : 정수 추가
, 두 그림은 하나의 링크 된 목록을 찾고, 다음 새 목록에 저장되어있는 추가를 완료하는 데 필요한로 결과를 전송 나타냅니다 후.

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