letcode 1:Two Sum

/**
 * 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 vHead(0), *p = &vHead;     //创建了新的链表
        int flag = 0;
        while (l1 || l2 || flag) {  //当l1,l2都传递完毕,且没有进位才停止
            int tmp = 0;
            if (l1 != nullptr) tmp += l1->val;  //先加l1
            if (l2 != nullptr) tmp += l2->val;  //再加l2
            tmp += flag;    //再加进位
            
            flag = tmp / 10;    //进位与否直接用和整除10就可表示
            tmp %= 10;
            
            ListNode *next = l1 ? l1 : l2;  //新的节点next如果l1空了就接l2
            if (next == nullptr) next = new ListNode(tmp);  //如果l2也空了就创建新的节点,把temp传进去
            next->val = tmp;
            
            p->next = next;
            p = p->next;
            l1 = l1 ? l1->next : nullptr;   //l1没有空就继续传,空了就赋值为空指针
            l2 = l2 ? l2->next : nullptr;   //l2没有空就继续传,空了就赋值为空指针
        }
        return vHead.next;
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容