有人可以解释以下链表清单

问题描述

我对while循环中的代码的最后三行感到困惑。我们基本上必须返回链表的总和。

ListNode* addTwoNumbers(ListNode* l1,ListNode* l2) {
        int sum=0;
        ListNode *l3 = NULL;
        ListNode **node = &l3;
        
        while(l1 != NULL || l2 != NULL || sum>0)
        {
            if(l1!=NULL)
            {
                sum+=l1->val;
                l1=l1->next;
            }
            if(l2!=NULL)
            {
                sum +=l2->val;
                l2=l2->next;
            }
            (*node) = new ListNode(sum%10);
            sum /= 10;
            node = &((*node) -> next); 
        }
        return l3;
    }

解决方法

此函数创建一个新的链表,该链表将包含另外两个作为参数传递给函数的列表的数字(数字)之和。

例如,如果传递的两个列表包含以下数据:

2 -> 4 -> 6 -> null
3 -> 5 -> 7 -> 9 -> null 

(即第一个列表包含数字642的表示形式,第二个列表包含数字9753的表示形式;每个节点包含给定数字的数字),然后生成结果列表将等于:

5 -> 9 -> 3 -> 0 -> 1 -> null

结果列表将包含数字10395,该数字等于数字6429753的总和。

该函数返回一个指向新列表头节点的指针。也就是说,相对于上面显示的示例,该函数返回一个指向包含5的节点的指针。

该函数应声明为:

ListNode* addTwoNumbers( const ListNode* l1,const ListNode* l2);

因为传入的列表在函数中未更改。

,

该函数正在创建一个新的链表,其中包含从其他2个链表中计算出的值。新列表的开头由l3变量指向。在进入循环之前,将node变量设置为指向l3变量的内存地址。

在第一个循环迭代中,语句(*node) = new ListNode(sum%10);创建一个新的ListNode对象,并将其分配给ListNode*所指向的node变量,即{{ 1}}。然后,语句l3设置node = &((*node) -> next);指向该新创建的node对象的next成员的内存地址。

在第二个循环迭代中,语句ListNode创建一个新的(*node) = new ListNode(sum%10);对象,并将其分配给ListNode所指向的ListNode*变量,即{先前创建的node对象的{1}}个成员。然后,语句next设置ListNode指向该新创建的node = &((*node) -> next);对象的node成员的内存地址。

以此类推,直到没有更多next对象可创建的循环结束为止。然后,该函数返回由ListNode指向的新列表。

,

上面的代码段是查找数字总和。 假设您要添加4385和8394。

添加它们的步骤如下:

5 + 4 = 9 这是最右边的数字
8 + 9 = 17,所以7是左下一位,1结转了
3 + 3 + 1 = 7 左下一位
4 + 8 = 12 这是最左边的数字对

答案是12779

您的代码只是复制了相同的过程,选择要写在某个位置的数字是由 sum%10 完成的,而结转的内容是由 sum / = 10

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...