这道题的代码我是参考->这篇文章的代码
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(活到老学到老)