Re: insert [sorted] a node in a linked list
In article <khcstn$p9l$1@speranza.aioe.org>, alelvb@inwind.it (alexo)
wrote:
I have a linked list that inserts nodes at the top or at the
bottom of the list, but I can't get it working if I try to sort the
inserting.
[...]
while(temp != 0)
{
if( value > temp->getValue() )
{
Node * new_node = new Node(value);
insert(new_node, temp);
break;
}
else
{
push(value);
break;
}
temp = temp->next;
}
}
}
Here you have a while loop, and inside the loop you have an if, and each
branch of the if has a break. That break will terminate the loop, so the
loop will never execute more than once.
Also, each branch of the if will insert the value, so if you did execute
the loop multiple times, the value would be inserted multiple times. You
only want it inserted once.
It's often clearer to separate the code that finds the insertion point
from the code that does the insertion. I'd also avoid variable names
like "temp" because they carry so little meaning. It also helps to be
consistent about using prefixes like "its"; and "datum" verses "value";
and whether insert takes a node or a value; and whether members are
public or need accessors. So I would expect to see something like:
Node *previous = head;
while (previous->next && previous->next->value < value)
previous = previous->next;
insert( previous, value );
-- Dave Harris, Nottingham, UK.
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]