【发布时间】:2010-11-27 00:05:47
【问题描述】:
我试图从双线程链表中删除单个节点。
我的工作..它的效率非常低。
我想知道是否可以获得一些专家建议或一些终止条件提示。
这是我从一组评级节点中删除一个节点的函数,存储在 headByRating 和一组名称节点中,存储在 headByName 中。所有这些都已排序....
bool list::remove (const char * const name) { 节点 *currByName = headByName; 节点 *currByRating = headByRating; 节点 *prev_node = NULL; while ( NULL != currByName && (strcmp(name, currByName->item.getName())!= 0)) { prev_node = currByName; currByName = currByName->nextByName; prev_node->nextByName = currByName; } 如果(currByName == headByName) { currByName = currByName->nextByName; headByName = currByName; } 否则如果(currByName->nextByName == NULL) {//那么我们必须在最后 currByName = prev_node; currByName->nextByName = NULL; //返回真; } 别的 { currByName = prev_node; currByName->nextByName = currByName->nextByName->nextByName; //返回真; } 而 ( NULL != currByRating && ( strcmp( 名称, currByRating->item.getName() ) != 0 ) ) { prev_node = currByRating; currByRating = currByRating->nextByRating; prev_node->nextByRating = currByRating; } if ( currByRating == headByRating ) // 是头部吗? { currByRating = currByRating->nextByRating; headByRating = currByRating; 返回真; } else if ( currByRating->nextByRating == NULL ) // 可能是尾巴吗? { currByRating = prev_node; currByRating->nextByRating = NULL; 返回真; } 别的 { currByRating = prev_node; currByRating->nextByRating = currByRating->nextByRating->nextByRating; 返回真; } 返回假; }是的,我只需要帮助简化代码,使其更高效。如果可能的话,我希望只组合和使用一个while循环。
【问题讨论】:
标签: c++