leetcode吧 关注:1,123贴子:2,456
  • 3回复贴,共1

[002]Add Two Numbers 为什么这个程序会超时?不明白

只看楼主收藏回复

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;
}
};


IP属地:安徽1楼2016-11-29 12:45回复
    标准答案有个头指针,所以每次插入就不需要判断是不是第一次插入,而我的程序没有那个虚拟的头指针,所以每次插入都需要判断是不是第一次插入,这样很耗时吗?


    IP属地:安徽2楼2016-11-29 12:47
    回复
      2025-08-20 17:08:10
      广告
      不感兴趣
      开通SVIP免广告
      顺便贴上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;
      }
      };


      IP属地:安徽3楼2016-11-29 12:48
      收起回复