力扣-2 两数相加

力扣2 两数相加

本人也是今天决定开始编写力扣算法题目,今天是第一天也发表一下纪念一下。
基本思想:
本人可能想的比较复杂,就是利用尾插法来进行实现。其中最重要的就是count变量来判断两数相加是否超过10。并且不要忘记最后也要判断count是否超过10,若超过还需要添加新结点。

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
    struct ListNode *head=l1;
    int len1=0,len2=0;
    while(head!=NULL){
        len1++;
        head=head->next;
    }
    head=l2;
    while(head!=NULL){
        len2++;
        head=head->next;
    }
    head=(struct ListNode*)malloc(sizeof(struct ListNode));
    head->val=0;
    head->next=NULL;
    struct ListNode *trail=head;
    int count=0;
    int length=(len1>len2?len1:len2);
   for(int i=0;i<length;i++){
      struct ListNode *Lode=(struct ListNode*)malloc(sizeof(struct ListNode));
       if((l1->val+l2->val+count)<10){
           Lode->val=(l1->val+l2->val+count);
           Lode->next=trail->next;
           trail->next=Lode;
           trail=Lode;
           count=0;
       }else{
           Lode->val=(l1->val+l2->val+count)%10;
           count=(l1->val+l2->val+count)/10;
           Lode->next=trail->next;
           trail->next=Lode;
           trail=Lode;
       }
       l1=l1->next;
       l2=l2->next;
       if(l2==NULL){
           l2=(struct ListNode*)malloc(sizeof(struct ListNode));
           l2->val=0;
           l2->next=NULL;
       }
       if(l1==NULL){
           l1=(struct ListNode*)malloc(sizeof(struct ListNode));
           l1->val=0;
           l1->next=NULL;
       }
   }
   if(count!=0){
       struct ListNode *Lode=(struct ListNode*)malloc(sizeof(struct ListNode));
      Lode->val=count;
      Lode->next=NULL;
      trail->next=Lode;
   }
   return head->next;
}

代码还需完善,欢迎提议

你可能感兴趣的:(C语言,力扣,算法,leetcode,c语言,数据结构)