我正在尝试在跳过列表中插入一些元素
typedef struct skiplist {
struct node * header;
struct node * termnode;
}skiplist;
typedef struct node
{
int key;
entr value;
struct node *next[MaxLevel];
}node;
其中节点按它们的键排序。但是,当我尝试插入一个比前一个键更大的节点时,我得到一个段错误,我发现它发生在插入函数中
void insert(list l,int skey,entr newvalue) {
nod update[MaxLevel-1];
for(i=0;i<=MaxLevel-1;i++) {
update[i]=(nod)malloc(sizeof(struct node));
}
nod x=l->header;
for(i=MaxLevel-1;i>=0;i--) {
while (x->next[i]->key<skey) {
x=x->next[i];
}
update[i]=x;
}
x=x->next[0];
if(x->key=skey) x->value=copyvalue(newvalue);
else
{
int lvl=randl();
x=makenode(l,lvl,skey,newvalue);
for(i=0;i<=lvl;i++) {
x->next[i]=update[i]->next[i];
update[i]->next[i]=x;
}
}
printf("\ninserted to list\n");
}
在
while (x->next[i]->key<skey)
因为
next[i]
一片空白。我不明白为什么会这样,任何帮助将不胜感激