力扣(LeetCode)小白刷题之路
开始2021年的刷题之路,每日一题,坚持打卡,全为C,以后学了其他语言也会更新代码。都是比较基础易懂的代码,也是第一次写文章,希望能和各位大牛互相交流,也欢迎来交流思想。
第二题:两数相加
C
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
struct ListNode* p=NULL,*l3=p;
int num=0;
while(l1||l2){
int n1=l1 ? l1->val :0;
int n2=l2 ? l2->val :0;
int sum=n1+n2+num;
if(!l3){
l3=p=malloc(sizeof(struct ListNode));
l3->val=sum%10;
l3->next=NULL;
}else{
l3->next=malloc(sizeof(struct ListNode));
l3->next->val=sum%10;
l3=l3->next;
l3->next=NULL;
}
num=sum/10;
if(l1){
l1=l1->next;
}
if(l2){
l2=l2->next;
}
}
if(num>0){
l3->next=malloc(sizeof(struct ListNode));
l3->next->val=1;
l3=l3->next;
l3->next=NULL;
}
return p;
}
思想
直接单链表对位进行相加,用一新双链表进行存储结果,该位置结果储存为对应位置相加与进制位之和sum的个位数,即sum%10。进制为num,num等于sum/10。循环结束后,若进制为仍大于0,则在结果链表中增加一位‘1’。