struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
struct ListNode *head=NULL,*p,*last;
int a=0;
while(l1&&l2){
p=(struct ListNode*)malloc(sizeof(struct ListNode));
a=(l1->val+l2->val+a)%10;//a是进位
p->val=a;
p->next=NULL;
a=(l1->val+l2->val+a)/10;
if(head==NULL){
head=p;
last=head;
}
else{
last->next=p;
last=p;
}
l1=l1->next;
l2=l2->next;
}
int b=0;
if(!l1&&l2){
while(l2){
p=(struct ListNode*)malloc(sizeof(struct ListNode));
if(a>0){
b=(l2->val+a+b)%10;
p->val=a;
p->next=NULL;
last->next=p;
last=p;
b=(l2->val+a+b)/10;
a=0;
}
else{
p->val=l2->val;
p->next=NULL;
last->next=p;
last=p;
}
l2=l2->next;
}
if(b>0){
p=(struct ListNode*)malloc(sizeof(struct ListNode));
p->val=b;
p->next=NULL;
last->next=p;
last=p;
}
}
if(!l2&&l1){
while(l1){
p=(struct ListNode*)malloc(sizeof(struct ListNode));
if(a>0){
b=(l1->val+a+b)%10;
p->val=a;
p->next=NULL;
last->next=p;
last=p;
b=(l1->val+a+b)/10;
a=0;
}
else{
p->val=l1->val;
p->next=NULL;
last->next=p;
last=p;
}
l1=l1->next;
}
if(b>0){
p=(struct ListNode*)malloc(sizeof(struct ListNode));
p->val=b;
p->next=NULL;
last->next=p;
last=p;
}
}
if(!l1&&!l2){
if(a>0){
p=(struct ListNode*)malloc(sizeof(struct ListNode));
p->val=a;
p->next=NULL;
last->next=p;
last=p;
}
}
return head;
}
两数之和问题那出错了呢,看半天没发现问题
a=(l1->val+l2->val+a)%10;//a是进位
注释和代码不一致啊。除以10才是进位
==排序:==所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。
==稳定性:==假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。
==内部排序:==数据元素全部放在内存中的排序。
==外部排序:==数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。
修改如下,改动处见注释,供参考:
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
struct ListNode *head=NULL,*p,*last;
int a=0;
while(l1&&l2){
p=(struct ListNode*)malloc(sizeof(struct ListNode));
a = l1->val+l2->val+a; // a=(l1->val+l2->val+a)%10; 修改
p->val = a % 10; // p->val=a; 修改
p->next=NULL;
a /= 10; // a=(l1->val+l2->val+a)/10; a是进位 修改
if(head==NULL){
head=p;
last=head;
}
else{
last->next=p;
last=p;
}
l1=l1->next;
l2=l2->next;
}
//int b=0; 修改
if(!l1&&l2){
while(l2){
p=(struct ListNode*)malloc(sizeof(struct ListNode));
//if(a>0){
a = l2->val+a; // b=(l2->val+a+b)%10; 修改
p->val = a % 10;// p->val=a; 修改
p->next=NULL;
last->next=p;
last=p;
a /= 10; //b=(l2->val+a+b)/10; 修改
//a=0;
//}
//else{
//p->val=l2->val;
//p->next=NULL;
//last->next=p;
//last=p;
//}
l2=l2->next;
}
//if(b>0){ 修改
//p=(struct ListNode*)malloc(sizeof(struct ListNode));
//p->val=b;
//p->next=NULL;
//last->next=p;
//last=p;
//}
}
if(!l2&&l1){
while(l1){
p=(struct ListNode*)malloc(sizeof(struct ListNode));
//if(a>0){ 修改
a = l1->val+a;//b=(l1->val+a+b)%10; 修改
p->val = a % 10; //p->val=a; 修改
p->next=NULL;
last->next=p;
last=p;
a /= 10;//b=(l1->val+a+b)/10; 修改
//a=0;
//}
//else{
//p->val=l1->val;
//p->next=NULL;
//last->next=p;
//last=p;
//}
l1=l1->next;
}
//if(b>0){ 修改
//p=(struct ListNode*)malloc(sizeof(struct ListNode));
//p->val=b;
//p->next=NULL;
//last->next=p;
//last=p;
//}
}
//if(!l1&&!l2){ 修改
if(a>0){
p=(struct ListNode*)malloc(sizeof(struct ListNode));
p->val=a;
p->next=NULL;
last->next=p;
last=p;
}
//} 修改
return head;
}