该题是链表题目,与指针有关
下文是题解:
指针与数据类型的差别:
指针指向下一个数的表示方法:ListNode * result; return result->next;
数据类型指向下一个数的表示方法:ListNode result; return result.next;
指针与数据类型的联系:
ListNode l1;
l1.val=0,l1.next=nullptr;
ListNode * p=&l1;
指针的关键作用:
ListNode result(-1);//设置头结点
ListNode* p=&result;//设置指针 作用是指针可以直接指到下一个指针p=p->next;
p->next=new ListNode(sum%10);//定义且赋值p->next指针
p=p->next;//直接去指向下一个数
定义result(数据类型)的指针,用指针去保存数据,最后输出result.next;
class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { int extra=0,sum=0; ListNode start(-1);//设置头结点 ListNode* p=&start;//设置指针 作用是指针可以直接指到下一个指针p=p->next; while(l1!=nullptr||l2!=nullptr){ int val1=l1==nullptr?0:l1->val; int val2=l2==nullptr?0:l2->val; int sum=val1+val2+extra; extra=sum/10; p->next=new ListNode(sum%10); p=p->next; l1=l1==nullptr?l1:l1->next; l2=l2==nullptr?l2:l2->next; } if(extra>0) p->next = new ListNode(extra); return start.next; } };
自己的代码:
/**
* 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 start(-1);
ListNode* p=&start;
int jin=0,sum=0;
while(l1!=nullptr||l2!=nullptr)
{
int num1=l1==nullptr?0:l1->val;
int num2=l2==nullptr?0:l2->val;
sum=num1+num2+jin;
jin=sum/10;
p->next=new ListNode(sum%10);
p=p->next;
l1=l1==nullptr?l1:l1->next;
l2=l2==nullptr?l2:l2->next;
}
if(jin!=0)
p->next=new ListNode(jin);
return start.next;
}
};
/** * 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 *result = new ListNode(0); //存放结果的链表 ListNode *p1 ,*p2; //分别指向两个相加的链表 ListNode *temp ; // 临时节点 存放临时数据 temp = result; p1 = l1 , p2 = l2; int z = 0; // 用来表示最终相同位数求和有没有超过10的 while(p1!=NULL || p2!=NULL){ //当两个指针都为空跳出来(思想差不多 不过后面参考了答案) // 用这种方式可以避免其判断 两个链表之间的长度问题 当一个链表到头了,用0表示后面位数 int x = (p1!=NULL) ? p1->val : 0 ; int y = (p2!=NULL) ? p2->val : 0 ; if(p1) p1 = p1->next; if(p2) p2 = p2->next; int sum = z + x+y; z = sum /10; // 用来记录大于10的位数(进一位则会记录下来) temp->next = new ListNode( sum % 10 ); temp = temp->next; } // 当两者都已经为空 看最后一位有没有超过10的值 if(z>0) temp->next = new ListNode(z); return result->next; } };