gpt4 book ai didi

c - 如何使用指向指针的指针插入链表

转载 作者:行者123 更新时间:2023-11-30 15:15:37 27 4
gpt4 key购买 nike

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;

}
}

最佳答案

e不要尝试在列表中查找没有后继的 person 元素,而是尝试查找第一个空指针。像这样的东西(未经测试):

void insert_sorted(person **p, char *name, int age)
{
while (*p) {
p = &(*p)->next;
}
*p = malloc( ... );
/* ... */
}

这种问题通常最好用笔和纸来解决,然后画几个方框和箭头。这个想法是,您的“p”指针不再指向特定的,而是指向某个指向的指针。

关于c - 如何使用指向指针的指针插入链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33495991/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com