c – 在访谈测试中使用的LinkedList

前端之家收集整理的这篇文章主要介绍了c – 在访谈测试中使用的LinkedList前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
[编辑]修正了我的代码.是while(temp!= NULL),而不是while(temp-> next!= NULL).很抱歉插入错误代码.

今天我参加了在线编程测试.采访者使用Codility评估我的代码和其他受访者.
在某个时刻,关于链接列表的问题已经提出.它将计算链表有多少项.
我做了唯一可行的方法,AFAIK:

//This is struct declaration
struct SomeStruct
{
    int value;
    SomeStruct* next;
}

int elementCount(SomeStruct* list)
{
    int count = 0;
    if(list != NULL)
    {
        SomeStruct* temp = list;
        while(temp != NULL)
        {
            count++;
            temp = temp->next;
        }
    }
    return count;
}

我记得当我发送这段代码作为这个问题的答案时,Codility指出这个解决方案是错误的,因为它耗费了太多时间来执行任务.
在我的头脑和this thread在SO上没有其他方法可以获得链表的大小而不需要遍历它,而不是简单的方式.

当Codility说这个解决方案错了时会有问题吗?还是有另一种方法

PS:允许使用STL的测试

解决方法

好吧,你不必为每次迭代评估间接temp->接下来两次.

你可以干脆做

int count( SomeStruct const* pNode )
{
    int result = 0;
    while( pNode != 0 )
    {
        ++result;
        pNode = pNode->next;
    }
    return result;
}

此外,作为WhozCraig notes,您的代码在逻辑上是错误的(通过一个结果产生关闭),而不仅仅是潜在的低效率.

猜你在找的C&C++相关文章