为什么此代码因hackerrank超时而终止显示

时间:2017-02-05 18:43:35

标签: java sorting data-structures linked-list mergesort

问题是 - 合并两个已排序的链接列表。 详情请见https://www.hackerrank.com/challenges/merge-two-sorted-linked-lists 当我在网站上提交此内容时,它显示“由于超时而终止”。请告诉我代码有什么问题,以及如何修复它。

Node MergeLists(Node headA, Node headB) {
 // This is a "method-only" submission. 
 // You only need to complete this method 
if(headA==null){
    return headB;
}else if(headB==null){
    return headA;
}else{
    Node h,t;
    if(headA.data>=headB.data){
        h=headB;
        t=h;
        h=h.next;
        headB=headB.next;
    }else{
        h=headA;
        t=h;
        h=h.next;
        headA=headA.next;
    }
    while(headA!=null && headB!=null){
        if(headA.data>=headB.data){
        h.next=headB;
        h=h.next;
        headB=headB.next;
    }else{
        h=headA;
        h=h.next;
        headA=headA.next;
    }
    }
    if(headB==null){
        h=headA;
    }
    return t;
}

}

1 个答案:

答案 0 :(得分:0)

代码似乎没有正确合并两个列表,laune对大多数错误进行了评论,而且while()循环中else后面的代码需要修复(它应该遵循与如果在while()循环中)。超时可能不是因为你的代码需要太长时间,而是因为对返回的合并列表的hackerrank post merge检查被卡在一个循环中或者是一个错误的引用之后。

尝试创建一个调用MergeLists函数的测试程序,以便对其进行调试。

为了解决Java没有指针指针的限制,您可以使用虚拟节点简化代码:

    Node t = new Node;
    Node h = t;
    // ... h.next = ... merge the lists while advancing h
    return t.next;