未能通过样例测试,但是记录一下。

BM11 链表相加(二)

  • 题目
  • 题解(474)
  • 讨论(472)
  • 排行
  • 面经new

中等  通过率:31.84%  时间限制:2秒  空间限制:256M

知识点链表模拟

描述

假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。

给定两个这种链表,请生成代表两个整数相加值的结果链表。

数据范围:

0≤𝑛,𝑚≤10000000≤n,m≤1000000

,链表任意值

 

0≤𝑣𝑎𝑙≤90≤val≤9

要求:空间复杂度

 

𝑂(𝑛)O(n)

,时间复杂度

 

𝑂(𝑛)O(n)

例如:链表 1 为 9->3->7,链表 2 为 6->3,最后生成新的结果链表为 1->0->0->0。

/**

 * struct ListNode {

 *  int val;

 *  struct ListNode *next;

 * };

 */

/**

 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可

 *

 *

 * @param head1 ListNode类

 * @param head2 ListNode类

 * @return ListNode类

 */

struct ListNode* addInList(struct ListNode* head1, struct ListNode* head2 ) {

    // write code here

    int i=0,i1=0,j=0,j1=0;

    struct ListNode* p1=head1,*p2=head1,*p3=head2;

    while(head1){

        i1++;

        i=head1->val+i*10;

        head1=head1->next;

    }

    while(head2){

        j1++;

        j=head2->val+j*10;

        head2=head2->next;

    }

    //printf("%d  %d",i,j);

    int num=i+j;int a[i1+j1];int length=0;

    printf("%d",num);

    while(num){

        a[length++]=num%10;

        num=num/10;

    }

    while(length){

        p1->val=a[--length];

        i1--;

        if(!i1){

            p1->next=p3;

        }

       if(!length){

        p1->next=NULL;

        return p2;

       }

        p1=p1->next;

       

    }p1->next=NULL;

   

return p2;

}

全部评论
这是基础题,加油
1
送花
回复
分享
发布于 05-06 18:27 上海
对于较长的链表,超出整数限制后失效,对于短链表还是可以的
点赞
送花
回复
分享
发布于 05-05 22:57 北京
滴滴
校招火热招聘中
官网直投

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务