我不知道我的逻辑在下面的代码行中哪里出错了。链接列表位于二进制搜索树内部的节点处。下面是我使用比较函数按字符串排序链表的函数
void addNewLLObj(TreeNode *tNode, int ranking, string title, int year, float rating){
LLMovieNode* newNode = new LLMovieNode(ranking, title, year, rating);
LLMovieNode* crawler = tNode -> head;
LLMovieNode* prev = NULL;
while(crawler != NULL){
if(crawler->title.compare(title) > 0){ // checks if the current nodes title is larger than insert title
if(crawler == tNode->head){
newNode->next = crawler;
tNode->head = newNode;
}
else{
prev->next = newNode;
newNode->next = crawler;
}
}
else if(crawler->next == NULL){
crawler->next = newNode;
newNode->next = NULL;
}
prev = crawler;
crawler = crawler->next;
}
}
如果我按的顺序给标题字符串"Dccc"、"Daaa"、"Dfff"、"Dzzz"、"Deee">
打印链接列表时,我将丢失"Dfff"字符串。我确信我的链表遍历是正确的。我就是搞不清逻辑哪里错了。我不确定我是在某个地方重写"Dfff",还是内存泄漏。
循环总是运行到列表的末尾。即使在找到插入新节点的位置之后。这可能会导致您多次添加新节点,从而导致某些节点从列表中消失。
解决方案很简单:在代码中添加一个break
,以在添加newNode
后打破循环。