Think是一種按名稱順序插入新元素的函數。 我知道如何做到這一點,如果我使用if來分開開始和其他插入條件。但我被要求將if和while合併成一個while循環。 我怎樣才能將插入函數集成到一個while循環與指針指針?如何使用指向要插入鏈接列表的指針的指針
person* insert_sorted(person *people, char *name, int age)
{
person *p=NULL;//,*t=NULL,*q=NULL;
person *ptr= people;
person **ptr2ptr=&ptr;
p=malloc(sizeof(person));
if (p == NULL){
printf("malloc() failed\n");
return NULL;
}
else {
p->name = name;
p->age = age;
if (people == NULL){ // empty list
people = p;
people->next =NULL;
}
else{
*ptr2ptr = ptr;
while((*ptr2ptr) !=NULL)
{
if (compare_people(p, people)<=0) // insert at the start
break;
else if ((*ptr2ptr)->next == NULL) //insert at the end
break;
else if (compare_people(*ptr2ptr, p) <=0 && compare_people(p, (*ptr2ptr)->next)<=0)//insert at the middle
break;
*ptr2ptr = (*ptr2ptr)->next;
}
//insert at the end
p->next = (*ptr2ptr)->next;
(*ptr2ptr)->next = p;
}
}
在至少你必須使'people'參數成爲指針的指針。否則,你只需要通過指向指針的指針來改變局部變量,但是你必須能夠從調用函數中更新頭指針。鏈接列表在這裏是一個流行的話題,看看相關的問題。 –
您的頂層'else'分支不返回任何內容。 –