void partition(Listp hd, int v) {
tassume(" dll(?k,null,hd,?end,null)");
Listp next = 0, prev = 0;
int tmp;
Listp curr = hd, less = 0, more = 0;
hd = 0;
while( curr != 0 ) {
tmp = curr->data;
if( tmp >= v ) {
/* add to more */
next = curr->n;
curr->n = more;
if( more != 0 )
more->b = curr;
more = curr;
more->b = 0;
curr = next;
}
else {
/* add to less */
next = curr->n;
curr->n = less;
if( less != 0 )
less->b = curr;
less = curr;
less->b = 0;
curr = next;
}
if( curr != 0 )
curr->b = 0;
}
return;
}