2 つの数値の加算 (Python + Java)

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 の考え方も同様ですが、詳しくは説明しません。

おすすめ

転載: blog.csdn.net/qq_43325582/article/details/122583900