题解 | #牛群的能量值#
牛群的能量值
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; } } };