在c中附加到列表的正确方法是什么?我一直在各处搜索,每次我自己尝试都会失败。
typedef struct node
{
char* groupName;
int groupSize;
boolean status;
struct node* next;
} node;
void add(struct node * *head)
{
struct node* temp=(struct node *)malloc(sizeof(node));
temp->groupName=name;
temp->groupSize=size;
if ((*head) == NULL) {
(*head) = temp;
(*head)->next = NULL;
} else {
struct node* ptr = (*head); //dont change head pointer, so make variable to keep track
while (ptr != NULL) ptr= ptr->next; //go until the end of the list
(ptr->next) = temp; //add this new data to the end of the list
temp->next = NULL; //null becomes end of list
}
}
调用(在main()中:
add(&head);
答案 0 :(得分:4)
问题可能在于这行代码:
while(ptr!=NULL) ptr= ptr->next; //go until the end of the list
您更改ptr
,直到它等于NULL
,这绝对不是您想要的,因为您在循环之后立即取消引用ptr
。
将其更改为
while(ptr->next != NULL) ptr = ptr->next;
看看是否有效。请记住:您对尚未拥有下一个节点的节点感兴趣(因此您可以插入它)。