未能通过样例测试,但是记录一下。
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;
}