美文网首页
letcode 2:Add Two Numbers

letcode 2:Add Two Numbers

作者: 嬴小政今天好好吃饭了吗 | 来源:发表于2019-10-14 21:31 被阅读0次
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        //创建新的链表来存储结果
        ListNode head(0);   //头结点
        ListNode *result = &head;   //结果链表以头结点起头
        
        int flag = 0;   //表示进位,初始化为0
        int temp = 0;   //表示相加的数,初始化为0
        
        while ( l1 || l2 || flag ){  //两个链表都循环完毕,并且也没有进位
            if (l1 != nullptr)     //加l1
                temp += l1->val;
            if (l2 != nullptr)     //加l2
                temp += l2->val;
            temp += flag;   //加进位
            
            //处理进位
            flag = temp / 10;
            temp = temp % 10;
            
            ListNode *next = l1 ? l1 : l2;  //将next置为恰当的节点
            
            //当两个链表都循环完毕却还有进位的时候
            if ( next == nullptr )
                next = new ListNode(temp);
            next->val = temp;
            
            //将新的结果节点添加到结果链表中
            result->next = next;
            result = result->next;
            
            //重新将相加结果置为0
            temp = 0;
            
            //循环l1和l2
            l1 = l1 ? l1->next : nullptr;
            l2 = l2 ? l2->next : nullptr;
        }
        //出去头结点,返回结果链表
        return head.next;
    }
};

相关文章

网友评论

      本文标题:letcode 2:Add Two Numbers

      本文链接:https://www.haomeiwen.com/subject/bjpdmctx.html