添加一个元素到链表的末尾
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;
}
}
此代码在列表为空时更新列表头。
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;
}
}
此代码在列表为空时更新列表头。