我有一个函数,它假设组织一个词干词典。我插入了一个函数调用,然后假设将其按字母顺序排列。添加到列表的前面和中间可以正常工作,但是添加到后面却没有。我看过几个来源,我不知道是什么问题。
void dictionary::insert(string s) {
stem* t = new stem;
t->stem = s;
t->count =0;
t->next = NULL;
if (isEmpty()) head = t;
else {
stem* temp = head;
stem* prev = NULL;
while (temp != NULL) {
if (prev == NULL && t->stem < temp ->stem) {
head = t;
head->next = temp;
}
prev = temp;
temp = temp->next;
if(t->stem > prev->stem && t->stem < temp->stem ){
prev->next =t;
t->next=temp;
}
}
if(temp == NULL && t->stem > prev->stem){
prev->next=t;
}
}
}
答案 0 :(得分:1)
if (temp->next=NULL) {
prev->next = t;
}
注意单个等于的用法。这样做的结果是将temp->next
设置为NULL
,然后评估if (NULL)
将始终为假。您应该使用==
。
这可能会完成这项工作:(抱歉,我现在没有编译器来测试它)
#include <string>
struct node;
struct node
{
node* next;
std::string value;
};
node* head = NULL;
void insert(const std::string& word)
{
node* n = new node;
n->value = word;
node* temp = head;
node** tempp = &head;
while (true)
{
if (temp == NULL or temp->value > word)
{
n->next = temp;
*tempp = n;
return;
}
temp = temp->next;
tempp = &temp->next;
}
}
答案 1 :(得分:1)
语句if(temp-&gt; next = NULL)不会产生布尔值,而是赋值。这就是为什么列表末尾的插入似乎不起作用的原因。