提问人:Netanel Zohar 提问时间:3/25/2022 最后编辑:Vlad from MoscowNetanel Zohar 更新时间:3/25/2022 访问量:41
为什么 Main 的头部没有得到节点?
why the head at main doest get the node?
问:
我试图将节点插入链接列表,但从 Poiter 到 Poiter 的值没有传递 我写了一张纸条*****问题在哪里出现
void insertTolist(list* head, list* node)
{
list* current = head;
list* currentPlusOne = head->next;
while (current->next != NULL)
{
if (current->data<node->data && currentPlusOne->data>node->data)
{
current->next = node;
node->next = currentPlusOne;
break;
}
if (current->data<node->data && currentPlusOne->next == NULL)
{
current->next = node;
node->next = (list*)calloc(1, sizeof(list));
break;
}
if (current->data > node->data && currentPlusOne->data >node->data)// b c
{
node->next =current;
head = node;// ***the head doesnt chanching at the main***
break;
}
current = current->next;
currentPlusOne = currentPlusOne->next;
}
//printlist(head);
}
答:
1赞
Vlad from Moscow
3/25/2022
#1
声明如下的函数
void insertTolist(list* head, list* node)
处理指向用作参数的头节点的指针值的副本。更改此语句中的副本
head = node;
不反映在原始指针的值上。
此外,如果传递的指针是空指针,则该函数可以调用未定义的行为,至少由于此声明
list* currentPlusOne = head->next;
还有这句话
node->next = (list*)calloc(1, sizeof(list));
没有意义。
您需要通过指向函数的指针将指向头节点的指针通过引用传递给函数,或者从函数返回指向头节点的指针(可能已修改)并将其值分配给原始指针。
如果使用第一种方法,那么该函数看起来就足够简单了。
void insertTolist( list **head, list *node )
{
while ( *head != NULL && !( node->data < ( *head )->data ) )
{
head = &( *head )->next;
}
node->next = *head;
*head = node;
}
如果在调用方中,指针被声明为head
list *head = NULL;
然后该函数被调用为
insertTolist( &head, node );
其中 node 是指向列表中插入节点的指针。
上一个:C++ 列表函数不旋转
下一个:更改结构中元素的值
评论
main
list *head; ... insertToList(&head)
list **