链表中每一个节点的值都在 0 - 9 之间,链表整体代表一个整数。 两个这种链表,请生成个整数相加值的结果链表。

问题详述: 假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。
给定两个这种链表,请生成代表两个整数相加值的结果链表。
例如:链表 1 为 9->3->7,链表 2 为 6->3,最后生成新的结果链表为 1->0->0->0。

算法实现:

1.将链表翻转
a.实现原理图:在这里插入图片描述

b.实现函数

   struct ListNode* reverseList(struct ListNode* head)

    struct ListNode *end, *temp;
    end=head;
    head=NULL;
    while(end!=NULL)
    {
    
    
        temp=head;
        head=end;
        end=end->next;
        head->next=temp;
         //reverse
    }
    return head;
  }
     struct ListNode* addInList(struct ListNode* head1, struct ListNode* head2 ) 

   {
    
    
 
 int jw=0, n;
  
     struct ListNode *head, *node;
     
    if(head1==NULL && head2!=NULL) return head2;
    if(head1!=NULL && head1==NULL) return head1;
    if(head1==NULL && head2==NULL) return NULL;
     
    head1=reverseList(head1);  //将链表反向
    head2=reverseList(head2);  //将链表反向
    head=NULL;
/* 实现两数相加,从低位开始 */
 while(head1!=NULL || head2!=NULL || jw>0) 
 // 对while中jw>0,防止两个链表在一样长 且在最后一位产生进位的情况,
    {
    
    
        n=jw;
        if(head1!=NULL)
        {
    
    
            n+=head1->val;
            head1=head1->next;
        }
        if(head2!=NULL)
        {
    
    
            n+=head2->val;
            head2=head2->next;
        }
        jw=n/10;
        node=(struct ListNode*)malloc(sizeof(struct ListNode));//建立一个节点申请一次空间
        node->val=n%10;
        node->next=head;
        head=node;
    }
return head;  
}

猜你喜欢

转载自blog.csdn.net/weixin_44910502/article/details/112505307