[002]Add Two Numbers 为什么这个程序会超时?不明白
leetcode吧
全部回复
仅看楼主
level 1
清风KTV 楼主
class Solution
{
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2)
{
int temp = 0;
ListNode* l3 = NULL;
ListNode* p = l3;
while(l1&&l2) //遍历两个链表
{
int sum = l1->val + l2->val + temp;
temp = sum / 10;
ListNode* l3_ptr = new ListNode(sum % 10);
if(l3 == NULL)
{
l3 = l3_ptr;
p = l3;
}
p->next = l3_ptr;
p = p->next;
l1 = l1->next;
l2 = l2->next;
}
while(l1) //如果l2为空,遍历l1
{
int sum = l1->val + temp;
temp = sum / 10;
ListNode* l3_ptr = new ListNode(sum % 10);
if(l3 == NULL)
{
l3 = l3_ptr;
p = l3;
}
p->next = l3_ptr;
p = p->next;
l1 = l1->next;
}
while(l2) ////如果l1为空,遍历l2
{
int sum = l2->val + temp;
temp = sum / 10;
ListNode* l3_ptr = new ListNode(sum % 10);
if(l3 == NULL)
{
l3 = l3_ptr;
p = l3;
}
p->next = l3_ptr;
p = p->next;
l2 = l2->next;
}
if(temp) //判断是否有进位?
{
ListNode* l3_ptr = new ListNode(temp);
if(l3 == NULL)
{
l3 = l3_ptr;
p = l3;
}
p->next = l3_ptr;
}
return l3;
}
};
2016年11月29日 04点11分 1
level 1
清风KTV 楼主
标准答案有个头指针,所以每次插入就不需要判断是不是第一次插入,而我的程序没有那个虚拟的头指针,所以每次插入都需要判断是不是第一次插入,这样很耗时吗?
2016年11月29日 04点11分 2
level 1
清风KTV 楼主
顺便贴上AC程序:
class Solution
{
public:
ListNode *addTwoNumbers( ListNode *l1, ListNode *l2 )
{
ListNode* l3 = new ListNode( 0 );
ListNode* p = l3;
int carry = 0;
while ( l1&&l2 )
{
int sum = l1->val + l2->val + carry;
ListNode* tem = new ListNode( sum % 10 );
p->next = tem;
p = p->next;
carry = sum / 10;
l1 = l1->next;
l2 = l2->next;
}
while ( l1 )
{
int sum = l1->val + carry;
ListNode* tem = new ListNode( sum % 10 );
p->next = tem;
p = p->next;
carry = sum / 10;
l1 = l1->next;
}
while ( l2 )
{
int sum = l2->val + carry;
ListNode* tem = new ListNode( sum % 10 );
p->next = tem;
p = p->next;
carry = sum / 10;
l2 = l2->next;
}
if ( carry )
{
ListNode* tem = new ListNode( carry );
p->next = tem;
p = p->next;
}
return l3->next;
}
};
2016年11月29日 04点11分 3
感觉这两个程序差不多,为什么一个通过,一个没有通过?
2016年11月29日 04点11分
1