면책 조항 :이 문서는 블로거 원본입니다, 추적 에 의해-SA의 CC 4.0 저작권 계약, 복제, 원본 소스 링크이 문을 첨부 해주세요.
제목은에서 가져온 것입니다 "파이썬 프로그래머 인터뷰 산술 책,"나는이 책의 주제에 매일을하고 그것을 공유 할, 하나 개의 범주에서 수집, 내 블로그에 저장 통합.
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