leetcode-2. 两数相加

这道题的代码我是参考->这篇文章的代码

class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode tail(0),*p=&tail;
        int cof=0;
        while(l1||l2||cof){
        	int sum=(l1?l1->val:0)+(l2?l2->val:0)+cof;
        	cof=sum/10;
        	p->next=new ListNode(sum%10);
         	p=p->next;
        	l1=l1?l1->next:l1;
        	l2=l2?l2->next:l2;
        }
        return tail.next;
    }
};

主要有以下问题:

  • 一开始我设置了p、q分别指向l1、l2,发现根本没有必要,不影响原指针
  • C++中类新建对象原则:引用该文 
方法一:
ClassName object(param);
这样就声明了一个ClassName类型的object对象,C++会为它分配足够的存放对象所有成员的存储空间。
注意:为节省存储空间,C++创建对象时仅分配用于保存数据成员的空间,而类中定义的成员函数则被分配到存储空间中的一个公用区域,由该类的所有对象共享。
例如,定义了一个这样的类:
class Rec
{
   public:
   Rec(int width,int height);
   ~Rec();
   int getArea();
   private:
   int Rwidth;
   int Rheight;
};
 
 
方法二:
ClassName *object=new ClassName(param);
delete object;
这种方法跟java有点类似,相同的是,它们都是在堆上分配内存来创建对象的(与上不同);
不同的是,C++用new创建对象时返回的是一个对象指针,object指向一个ClassName的对象,C++分配给object的仅仅是存放指针值的空间。
而且,用new 动态创建的对象必须用delete来撤销该对象。只有delete对象才会调用其析构函数。
注意:new创建的对象不是用“*”或“.”来访问该对象的成员函数的,而是用运算符“->”;
例如:Rec *rec=new Rec(3,4);
      rec->getArea();
      delete rec;
  • while内的判断统一了操作(超牛逼)
  • l1=l1?l1->next:l1,(第一次知道可以这样子用)
  • 最后的return是亮点,我一开始一直犹豫到底有没有头指针,不知道怎么统一问题,原来可以return object.next(活到老学到老)

猜你喜欢

转载自blog.csdn.net/qq_39460289/article/details/80502435