[编辑]修正了我的代码.是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,您的代码在逻辑上是错误的(通过一个结果产生关闭),而不仅仅是潜在的低效率.