从列表中删除

时间:2014-11-06 01:17:47

标签: c++ algorithm list

我有一个这样的列表:

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

任何想法为什么?

1 个答案:

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