我有一个这样的列表:
struct List {
int i;
int n = 0;
List *previous;
List *next;
List * head = NULL;
List * tail = NULL;
};
我将元素添加到列表中,例如我有一个列表{10000,10,200}。它创造得很好。
我的擦除功能是这样的:
List * erase(List * lista, List * elem) {
List * pom;
if(elem != NULL) {
pom = elem->next;
elem->next = pom->next;
} else {
pom = lista;
lista = lista->next;
}
lista->n--;
delete pom;
}
现在,当我想要删除项目时(正是这个项目,对于其他项目,它正常工作):
erase(l1, l1->head->next->next);
我想用函数显示结果:
void showSequence(List * m) {
for(int i = 0; i < m->n; i++) {
printf("%i ", m->head->i);
m->head = m->head->next;
}
}
为了获得好结果,我需要两次调用showSequence,因为第一次它给了我{0,10}和第二次(罚款){200,10}。
任何想法为什么?
答案 0 :(得分:0)
您的showSequence
功能会修改head
链接。在第二次通话时,m->head
位于最后一个链接。
void showSequence(List * m) {
List *c = m->head;
for(int i = 0; i < m->n; i++) {
printf("%i ", c->i);
c = c->next;
}
}