[LeetCode] #2. Add Two Numbers

9213 ワード

#2.2つの数の加算


質問する


質問リンク

2つの接続リストl1=[2,4,3]l2=[5,6,4]が与えられると、各接続リストの要素が逆方向に接続され、342465が生成された後、生成された接続リストが戻される.

に答える


1)接続リスト807l1の逆順を求める=>l2 , rev12)逆順接続リストのvalのみを接続します.=>rev2 , str13)2つの接続リストのvalを追加します.=>str24)文字列sumの各位置からなる接続リストを作成する.sum列をリストにした後、リストを接続リストに再リストします.=>sum5)res_nodeの逆順を求める.=>res_node

コード#コード#


完全なコード
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

class Solution:
    def reverseList(self, head: ListNode):
        prev, curr = None, head

        while curr:
            next = curr.next
            curr.next = prev
            prev = curr
            curr = next
        return prev

    def list2node(self, list) -> ListNode:
        new_node = ListNode()
        curr = new_node
        for i in range(len(list)):
            curr.next = ListNode(list[i])
            curr = curr.next

        return new_node.next

    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        str1, str2 = '', ''
        rev1 = self.reverseList(l1)
        rev2 = self.reverseList(l2)

        while rev1:
            str1 += str(rev1.val)
            rev1 = rev1.next
        while rev2:
            str2 += str(rev2.val)
            rev2 = rev2.next

        sum = str(int(str1) + int(str2))
        sum_list = []
        for i in range(len(sum)):
            sum_list.append(int(sum[i]))
        print("sum_list: ", sum_list)
        res_node = self.list2node(sum_list)
        rev_node = self.reverseList(res_node)

        return rev_node
rev_node:接続リストは、値ListNode 클래스と、次のノードを指すvalとから構成される.next:逆順序接続リストの位置を求める前に実装された関数と同じである.reverseList():リスト要素からなる接続リストを作成します.
2つの接続リストのvalを追加するには、valをstrに変換し、接続後に整数を加えます.追加した結果をint->str->list->listNodeに順次変換します.