题解 | #牛群的能量值#

牛群的能量值

https://www.nowcoder.com/practice/fc49a20f47ac431981ef17aee6bd7d15

解题思路:模仿加法运算,每位相加,设计一个进位来保存是否进一,直到两个链表轮巡完。

分三个步骤的同时,需要考虑两个子链表可能为空的情况:

1,两个子链表非空时,获取其节点值相加,并记录进位,一直轮巡完到其中一个子链表;

2,若此时剩下的是子链表1非空,那么就对子链表1和进位相加,直至轮巡完;

3,若此时剩下的是子链表2非空,那么就对子链表2和进位相加,直至轮巡完;

4,还要考虑是否把最后的进位增加为最后一个新节点;

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param l1 ListNode类 
     * @param l2 ListNode类 
     * @return ListNode类
     */
    ListNode* addEnergyValues(ListNode* l1, ListNode* l2) {
        // 解题思路:模仿加法运算,每位相加,设计一个进位来保存是否进一,直到两个链表轮巡完。
        // 分三个步骤的同时,需要考虑两个子链表可能为空的情况:
        // 1,两个子链表非空时,获取其节点值相加,并记录进位,一直轮巡完到其中一个子链表;
        // 2,若此时剩下的是子链表1非空,那么就对子链表1和进位相加,直至轮巡完;
        // 3,若此时剩下的是子链表2非空,那么就对子链表2和进位相加,直至轮巡完;
        // 4,还要考虑是否把最后的进位增加为最后一个新节点;
        int carry = 0;
        ListNode* SentryHead = new ListNode(0);
        ListNode* move = SentryHead;
        if(l1 == nullptr){
            return l2;
        }
        else if(l2 == nullptr){
            return l1;
        }
        else {
            while(l1 && l2){
                ListNode* NewOne = new ListNode((l1->val + l2->val + carry) % 10);
                carry = (l1->val + l2->val + carry) / 10;
                move->next = NewOne;
                move = move->next;
                l1 = l1->next;
                l2 = l2->next;
            }
            if(l1 == nullptr){
                // 还要考虑carry
                while(l2){
                    ListNode* NewOne = new ListNode((l2->val + carry) % 10);
                    carry = (l2->val + carry) / 10;
                    move->next = NewOne; 
                    move = move->next;
                    l2 = l2->next;
                }
            }
            else {
                // 还要考虑carry
                while(l1){
                    ListNode* NewOne = new ListNode((l1->val + carry) % 10);
                    carry = (l1->val + carry) / 10;
                    move->next = NewOne; 
                    move = move->next;
                    l1 = l1->next;
                }
            }
            if(carry == 1){
                ListNode* NewOne = new ListNode(carry);
                move->next = NewOne;
            }
            return SentryHead->next;
        }
    }
};

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-24 20:55
阿里国际 Java工程师 2.7k*16.0
程序员猪皮:没有超过3k的,不太好选。春招再看看
点赞 评论 收藏
分享
躺尸修仙中:因为很多92的也去卷中小厂,反正投递简历不要钱,面试不要钱,时间冲突就推,不冲突就面试积累经验
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务