LeetCode · 毎日の質問 · 445. 2 つの数字の足し算 II · シミュレーション

著者: Xiao Xun
リンク: https://leetcode.cn/problems/add-two-numbers-ii/solutions/2328613/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge- 67qx/
出典: LeetCode
著作権は作者に帰属します。商業的転載の場合は著者に連絡して承認を求め、非商業的転載の場合は出典を明記してください。

トピック

 

 

一連の考え

タイトル -> 2 つのリンク リストがある場合、番号の最上位の桁がリンク リストの先頭になります。各ノードには 1 桁だけが保存されます。これらの数値を追加すると、新しいリンクされたリストが返されます。

最も単純で直接的な方法は、2 つのリンク リストを反転し、反転後のリンク リストの先頭から列挙して累積し、新しいリンク リストを使用してその値を保存し、最後に新しいリンク リストの先頭ノードを返すことです。新しいリンク リストでは末尾挿入方法を使用する必要があることに注意してください。

リンク リストを処理用に配列に変換し、リンク リストの各要素を列挙し、それを配列に等価的に格納することもできるため、質問の意味 -> 2 つの数値の合計、ただし上位ビットが前に来るしたがって、列挙合計プロセスでは、末尾から先頭まで列挙し、最後に新しいリンクされたリストを返す必要があります。

コードコメントは非常に詳細です

コード


/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
    int arr1[100] = {0}, arr2[100] = {0};
    int index1 = 0, index2 = 0;
    while (l1) {//l1转换为数组
        arr1[index1++] = l1->val;
        l1 = l1->next;
    }
    while (l2) {//l2转换为数组
        arr2[index2++] = l2->val;
        l2 = l2->next;
    }
    int arr3[101] = {0};//记录累和
    int index3 = 0;
    int c = 0;
    for (index3; index3 < 101; index3++) {//枚举数组求和
        if (index1 > 0 && index2 > 0) { //l1,l2都有元素
            arr3[index3] = (arr1[--index1] + arr2[--index2] + c) % 10;
            c = (arr1[index1] + arr2[index2] + c) / 10;
        } else if (index1 > 0) {// l1有元素
            arr3[index3] = (arr1[--index1] + c) % 10;
            c = (arr1[index1] + c) / 10;
        } else if (index2 > 0) {// l2有元素
            arr3[index3] = (arr2[--index2] + c) % 10;
            c = (arr2[index2] + c) / 10;
        } else if (c){// 进位还有元素
            arr3[index3] = c;
            c = 0;
        } else {//都没元素了
            break;
        }
    }
    struct ListNode *haed = (struct ListNode *)malloc(sizeof(struct ListNode));
    haed->next = NULL;
    struct ListNode *next = haed;
    while (index3 > 0) {//数组转换为链表,这里可以和上面合并在一起
        struct ListNode *node = (struct ListNode *)malloc(sizeof(struct ListNode));
        node->next = NULL;
        node->val = arr3[--index3];
        next->next = node;
        next = node;
    }
    return haed->next;
}

作者:小迅
链接:https://leetcode.cn/problems/add-two-numbers-ii/solutions/2328613/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-67qx/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

おすすめ

転載: blog.csdn.net/m0_64560763/article/details/131512532