指向函数的链接列表不更新元素1例

时间:2016-11-15 22:03:30

标签: c pointers struct

我正在使用像这样的结构

struct infoM {
 char* direction;
 int key;
};

typedef struct nodeM{
    struct infoM nodeInfo;
    struct nodeM *next;
    struct nodeM *prev;
} node;

typedef node list;

我有一个函数可以通过特定字段返回所需节点

node * search(list *l, char* direction) {}

这是我从列表中删除元素的功能

  int delete(list *l, char* direction) {
node *tmp = search(l, direction);
if (tmp != NULL) {
    node *ant = tmp->prev;
    node *seg = tmp->next;

    if (seg != NULL) {

        if (ant != NULL) {  
            ant->next = seg;
            seg->prev = ant;
            free(tmp);
            return 1;
        } else { //prev null
            seg->prev = NULL;
            *l = *seg;
            tmp = NULL;
            free(tmp);
            return 1;
        }
    } else { //next null
        if (ant == NULL) { 
            l->nodeInfo.key = somevalue;
            l->next = NULL;
            l->prev = NULL;
            return 1;
        } else {
            printf("Here is the problem\n");
            ant->next = NULL;
            free(tmp);
            return 1;
        }
    }
} else { //tmp nulo
    perror("Error delete : node null\n");
    return 0;
}
}

如果我在列表中有4个元素,1234并且我删除第一个第一个元素一切正常并返回234.如果我删除最后一个元素它返回23似乎工作得很好。但是如果我现在尝试删除最后一个元素,那么函数什么都不做,尽管它是234的同一情况,我不明白为什么。该列表未更新。

主要是我使用这样的列表:

 list a;
 delete(&a, "whatever");

我做错了什么?

这是搜索的代码

node * createnode(){
node *tmp = (node *) malloc (sizeof(node));
return tmp;
}



node * search(list *l, char* direction) {
node *tmp = createnode();   

if (l->nodeInfo.key == 777) {
    perror("Error search: empty list\n");
    return NULL;
}

tmp=l;

while((strcmp(direction, tmp->nodeInfo.direction) !=0) && (tmp->next != NULL)) {
    tmp = tmp->next;
}

if (strcmp(direction, tmp->nodeInfo.direction) == 0) {
    return tmp;
} else {
    perror("Error search: element not found\n");
    return NULL;
}
}

0 个答案:

没有答案