添加一个元素到链表的末尾

Adding an element to end of the 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 我曾经添加第一个元素。

您可以在 main

中创建一个 虚拟头节点
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;

 }
}

所以你的列表实际上是从列表

中的第二个节点开始的

您可以添加一级间接并保留指向当前节点的指针。通过这个指针修改链表。初始值是头部的地址。之后,它持有前一个节点的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;
    }
}

此代码在列表为空时更新列表头。