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,我曾经添加第一个元素。
答案 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;
}
}
当列表为空时,此代码会更新列表头。