2.两数相加
和那个数组相加的有点像,多了点链表要注意的,不知道我写的是不是有点笨
数组相加的要点在于不同长度的空位补0就可以了
链表在长度重合点地方与数组差别不大,其他的注意点主要在一条已经走完 一条还剩一段的情况下
注意点:
1.此时是否有进位
2.最后末尾进位的时候需要新增一个结点
//2两数相加
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* result;
ListNode* head=new ListNode(-1);
result=head;
int flag=0;
while(l1!= nullptr&&l2!= nullptr){
ListNode* temp=new ListNode(-1);
temp->val=(l1->val+l2->val+flag)%10;
if(l1->val+l2->val+flag>=10)
flag=1;
else
flag=0;
l1=l1->next;
l2=l2->next;
result->next=temp;
result=result->next;
}
if(l1!= nullptr){
while(l1!= nullptr&flag!=0){
ListNode* temp=new ListNode(-1);
temp->val=(l1->val+flag)%10;
if(l1->val+flag>=10){
flag=1;
}else{
flag=0;
}
l1=l1->next;
result->next=temp;
result=result->next;
}
result->next=l1;
}
if(l2!= nullptr){
while(l2!= nullptr&&flag!=0){
ListNode* temp=new ListNode(-1);
temp->val=(l2->val+flag)%10;
if(l2->val+flag>=10){
flag=1;
}else{
flag=0;
}
l2=l2->next;
result->next=temp;
result=result->next;
}
result->next=l2;
}
if(flag!=0){
ListNode* temp=new ListNode(1);
result->next=temp;
}
return head->next;
}
感觉链表写顺手了,开心,下班!