私はPythonで2つのリンクリストから2つの数字を追加するアルゴリズムを実装しています。例えばpython ternary if文がキャッチされないなし
、
first: 7 -> 1 -> 6 617
second: 5 -> 9 -> 2 +295
-----
912
output: 2 -> 1 -> 9 (which indicates 912)
(コーディング面接2-5割れから)これは
class Node:
def __init__(self, val=None):
self.data = val
self.Next = None
class LinkedList:
def __init__(self):
self.head = None
self.size = 0
def __repr__(self):
temp = self.head
alist = []
while temp:
alist.append(temp.data)
temp = temp.Next
return str(alist)
def add(self, val):
cur = self.head
prev = None
if cur is None:
self.head = Node(val)
else:
while cur:
prev = cur
cur = cur.Next
prev.Next = Node(val)
self.size += 1
def adding(p1,p2):
pointer1 = p1.head
pointer2 = p2.head
remainder = 0
sum_list = LinkedList()
while pointer1 is not None or pointer2 is not None:
first = 0 if pointer1.data is None else pointer1.data
second = 0 if pointer2.data is None else pointer2.data
sum_ = first + second + remainder
remainder = 1 if sum_ >= 10 else 0
sum_ %= 10
sum_list.add(sum_)
if pointer1 is not None:
pointer1 = pointer1.Next
if pointer2 is not None:
pointer2 = pointer2.Next
if remainder > 0:
sum_list.add(remainder)
return sum_list
私の問題はfirst = 0 if pointer1.data is None else pointer1.data
で、私のコードです。 両方のリンクされたリストのサイズが同じであれば動作しますが、一方が他のものより短い場合、短いものはNone
になります。だから私は私のifステートメントがこれをキャッチし、変数を(最初に)0
とすることを期待しています。しかし、それはAttributeError: NoneType object has no attribute 'data'
をスローする。
私が正常に書く場合、私はternary operator
を使用する場合、ないternary operator
if pointer1 is None:
first = 0
else:
first = pointer1.data
if pointer2 is None:
second = 0
else:
second = pointer2.data
は私が何かを逃したの働いていますか? ありがとう!
はい、 'pointer1.data'を実行する前に' pointer1がNone'でないかどうかを確認する必要があるので –