将元素添加到链接列表的末尾

时间:2015-01-22 08:13:52

标签: c linked-list

void    AddToEnd(double data ,int x, int y, element **list){
element *node, *tmp;
node=*list;
 if (data != 0)
 {
    tmp=malloc(sizeof(element));
    tmp->value=data;
    tmp->x_element=x;
    tmp->y_element=y;
    tmp->next=NULL;
    if (node !=NULL) {
        while (node->next != NULL) node=node->next;
        node->next=tmp;
    }
    else
    {
        *list=tmp;
    }
 }  

}

如何摆脱这个“if(node!= NULL)/ else”?我想在列表的末尾添加一个元素,但没有这个if / else,我曾经添加第一个元素。

2 个答案:

答案 0 :(得分:1)

您可以在主

中创建虚拟头节点
element *list = malloc(sizeof(element));
list->value=0;
list->x_element=0;
list->y_element=0;
list->next=NULL;

从这里开始,您可以使用AddToEnd修改(不使用if / else)作为

void AddToEnd(double data ,int x, int y, element **list){
element *node, *tmp;
node=*list;
 if (data != 0)
 {
    tmp=malloc(sizeof(element));
    tmp->value=data;
    tmp->x_element=x;
    tmp->y_element=y;
    tmp->next=NULL;

    while (node->next != NULL) node=node->next;
    node->next=tmp;

 }
}

因此,您的列表实际上是从列表中的第二个节点

开始的

答案 1 :(得分:1)

您可以添加一个间接级别并保留指向当前节点的指针。通过此指针修改列表。初始值是头部的地址。之后,它保存前一个节点的next字段的地址。

void AddToEnd(double data, int x, int y, element **list)
{
    if (data != 0) {
        element *tmp = malloc(sizeof(*tmp));

        tmp->value = data;
        tmp->x_element = x;
        tmp->y_element = y;        
        tmp->next = NULL;

        while (*list) {
            list = &(*list)->next;
        }

        *list = tmp;
    }
}

当列表为空时,此代码会更新列表头。