程序花费的时间超过预期错误



下面是一个在gfg中反转双链表的程序。

当我尝试提交时,我得到以下错误

您的程序花费的时间超出预期。超过时间限制预期时限0.00秒

有人能告诉我如何减少程序的时间吗?

代码

public static Node reverseDLL(Node  head)
{
Node p,cur;
p=head;
cur=head.next;
while(cur!=null)
{
if(cur.next==null)
{
p.next=cur.next;
cur.next=head;
head.prev=cur;

head=cur;
break;
}

p.next=cur.next;
cur.next.prev=p;

cur.next=head;
head.prev=cur;

head=cur;
cur=p.next;
}
return head;
}

您的代码不正确:

未正确设置(原始(尾部节点的prev成员。它不是在if块中设置的,而是在上一次迭代中,它通过cur.next.prev=p获得值,即将其设置为(原始(头节点。这在数据结构中创建了一个无限循环。最终,prev链路中没有一个是null。测试框架可能一直在循环地跟踪prev链接,直到超时为止。

此外,该函数假定head不是null。这可能无法保证。

还有太多的作业正在进行。使用双链表非常简单:只需交换每个节点中nextprev的值:

public static Node reverseDLL(Node  head)
{
if (head == null) {
return null;
}
Node next = head.next;
while (next != null) {
head.next = head.prev;
head.prev = next;
head = next;
next = head.next;
}
head.next = head.prev;
head.prev = null;
return head;
}

这是O(N(时间的经典解决方案,所以我想这项任务的时间约束需要为O(1(求解。查看此线程:https://www.google.com/url?sa=t&source=web&rct=j&url=https://discuss.codechef.com/t/reverse-a-doubly-linked-list-in-o-1/72850&ved=2ahUKEwjipdrQw_T1AhVYLTQIHahIDx8QFnoECBQQAQ&usg=AOvVaw1c0BDUOM0suEK7I4B9pQs

相关内容

  • 没有找到相关文章

最新更新