2 つの非負の整数を表す 2 つの空ではないリンク リストが与えられます。それぞれの数字は逆の順序で保存され、各ノードは 1 つの数字のみを保存できます。
2 つの数値を加算し、その合計を同じ形式で表すリンク リストを返します。
どちらの数字も、ゼロ以外のゼロで始まることはないと仮定します。
入力: l1 = [2,4,3]、l2 = [5,6,4]
出力: [7,0,8]
説明: 342 + 465 = 807。
例 2:
入力: l1 = [9,9,9,9,9,9,9]、l2 = [9,9,9,9]
出力: [8,9,9,9,0,0,0,1]
アイデア: 順番に追加するだけです。キャリーがあり、リンクされたリストが空の場合の処理に注意してください。Python は浮動小数点と整数の演算に注意を払う必要があります。
class ListNode(object):
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution(object):
def assTwoNumber(self, l1, l2):
result = ListNode() # 结果链表
re = result # 不直接用result,为保留链表初始指针指向第一个节点
flag = 0 # 进位标识
while l1 or l2:
num1 = l1.val if l1 else 0
num2 = l2.val if l2 else 0
sums = num1 + num2 + flag
re.next = ListNode(sums % 10) # 相加结果
re = re.next
flag = int(sums / 10) # 进位处理
if l1: l1 = l1.next # 移动到下一个节点
if l2: l2 = l2.next
if flag: # 两个链表遍历完,还有进位
re.next = ListNode(1)
return result.next
if __name__ == "__main__":
l1 = ListNode(2, ListNode(4, ListNode(3)))
l2 = ListNode(5, ListNode(6, ListNode(4)))
re = Solution().assTwoNumber(l1, l2)
while re:
print(re.val, end=' ')
re = re.next
if - else の使用法については、https: //blog.csdn.net/qq_43325582/article/details/122544661
を参照してください。 さらに、各ビットの加算結果を直接格納するには、変数を使用します。
def addTwoNumbers(self, l1, l2):
result = ListNode()
re = result
sums = 0
while l1 or l2 or sums:
if l1:
sums += l1.val
l1 = l1.next
if l2:
sums += l2.val
l2 = l2.next
re.next = ListNode(sums % 10)
re = re.next
sums = int(sums / 10)
return result.next
Java の考え方も同様ですが、詳しくは説明しません。