user1547386
user1547386

Reputation: 91

C++:Linked list ordering

I have a function and it is suppose to organize a dictionary of stemmed words. I have a function call inserted then suppose to place it in the right alphabetical order. Adding to the front and middle of the list works, but adding to the back doesn't. I've looked at several sources and I can't tell what's wrong.

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

Upvotes: 0

Views: 202

Answers (2)

Guilherme Bernal
Guilherme Bernal

Reputation: 8293

if (temp->next=NULL) {
    prev->next = t; 
}

Note the usage of a single equal. The effect of this is to set the temp->next to NULL and then evaluate if (NULL) witch will be always false. You should use ==.


This will probably do the job: (sorry, I don't have a compiler right now to test it)

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

Upvotes: 1

bobestm
bobestm

Reputation: 1334

The statement if(temp->next=NULL) does not result in a boolean but rather an assignment. This is why the insert to the end of the list doesn't appear to work.

Upvotes: 1

Related Questions