我已完成此代码以从列表中删除元素:
列表结构:
typedef struct list_t{
struct node_t *head;
int size;
};
typedef struct node_t{
struct entry_t *element;//Each entry has a key
struct node_t *next;
}node_t;
删除方法:
int list_remove(struct list_t *list, char *key){
node_t *no = list->head;
struct list_t *lista = list_create();
int i;
for(i=0;i<list->size;i++){
if(strcmp(no->element->key, key)==0)
no=no->next;
else {
list_add(lista,no->element);
no=no->next;
}
}
}
列表中的每个元素都有一个键。
我的想法是使用给定列表(列表)中的元素创建一个新列表(lista),但我要删除的元素除外。
我现在的问题是:
感谢。
答案 0 :(得分:0)
这是在链接列表中就地删除节点的标准方法。希望这对你有用:
int list_remove(struct list_t *list, char *key) {
node_t *node = list->head;
node_t *prev = NULL; //to keep track of the previous node
int i;
for(i=0; i<list->size; i++) {
if(strcmp(node->element->key, key)==0) {
if(node == list->head) { //if 1st node has to be deleted
if(list->size == 1) //if there's only one node in list
list->head = NULL;
else
list->head = node->next;
list->size--;
return 0;
}
prev->next = node->next;
return 0;
} else {
prev = node;
node=node->next;
}
}
return -1;
}
答案 1 :(得分:0)
看,
你不必为此创建一个新列表,它根本没有效率!
首先,你必须检查元素是否是第一个!
如果要删除第i个链,请转到(i-1)元素并将其与(i + 1)连接,然后释放第i个元素。