我是靠谱客的博主 甜蜜荷花,最近开发中收集的这篇文章主要介绍(leetcode 2) 两数相加 C++,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

这是leetcode的第二题,两数相加,题目传送门

做这一题首先要明白,数据在链表中逆序存储,那么我们顺着链表的方向看,就是先低位后高位,这是一件好事。我们用竖式做加法的时候,也是末位对齐,那么我们只要从链表的头部开始加,就是相当于末位对齐加了。

其次是进位的处理,最后一次还有进位如何处理,可以在最后判断,也可以在循环的时候就直接处理,有进位我就继续循环做加法,把进位加到最高位。这种代码简短一些:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
       ListNode* root = new ListNode(); //最后要返回结果的头指针,所以新建一个头部指针,最后返回结果用
       ListNode* curr = root; //当前指针
       int t = 0;
       while(l1 || l2 || t!=0){  //只要l1和l2还没空,或者还有进位就继续做加法
           if(l1){
               t += l1->val;
               l1 = l1->next;  //处理下一个数
           }
           if(l2){
               t += l2->val;
               l2 = l2->next;
           }
           curr->next = new ListNode(t % 10);  //得到的结果放在当前指针的尾部
           curr = curr->next;  //指针后移,确保curr是当前的最新位置
           t /= 10;  //进位
       }
       return root->next;  //root本身不是计算结果,他的下一个才是
    }
};

或者把进位放到最后,改变不大

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
       ListNode* root = new ListNode();
       ListNode* curr = root;
       int t = 0;
       while(l1 || l2){
           if(l1){
               t += l1->val;
               l1 = l1->next;
           }
           if(l2){
               t += l2->val;
               l2 = l2->next;
           }
           curr->next = new ListNode(t % 10);
           curr = curr->next;
           t /= 10;
       }
       if(t!=0){
           curr->next = new ListNode(t % 10);
       }
       return root->next;
    }
};

最后

以上就是甜蜜荷花为你收集整理的(leetcode 2) 两数相加 C++的全部内容,希望文章能够帮你解决(leetcode 2) 两数相加 C++所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(78)

评论列表共有 0 条评论

立即
投稿
返回
顶部