C++:链表排序



我有一个函数,它应该组织一个词干词典。我插入了一个函数调用,然后假设将其按正确的字母顺序放置。添加到列表的前面和中间有效,但添加到后面则不行。我看了几个来源,我说不出出了什么问题。

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;
        }
    }
}

语句if(temp->next=NULL)不会导致布尔值,而是导致赋值。 这就是为什么插入列表末尾似乎不起作用的原因。

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;
    }
}

最新更新