提问人:Risher322 提问时间:10/29/2023 更新时间:10/29/2023 访问量:38
如何在链表中返回结构节点指针
How to return a struct node pointer in linked list
问:
int position(int key)
{
struct node *new=(struct node*)malloc(sizeof(struct node));
struct node *p1=head;
while(p1->info!=key&&p1->link!=NULL)
p1=p1->link;
return struct node *p1;
}
void insertafter()
{
struct node *new=(struct node*)malloc(sizeof(struct node));
struct node *p1=head;
p1=position();
}
我想将函数位置的 p1 的值返回给 insertafter()。那么,既然它返回一个结构节点,那么 position 的返回类型是什么,我应该如何给出 return 语句。 Key 是我必须插入新节点的值。
答:
0赞
Milinda Shehan
10/29/2023
#1
看来你走在正确的轨道上!但是,需要进行一些更正。
在函数中,应处理以下情况:when 以避免取消引用 null 指针。此外,您无需在此函数中分配内存。下面是更正后的函数:position
head
NULL
new
position
struct node* position(int key)
{
struct node *p1 = head;
while (p1 != NULL && p1->info != key)
p1 = p1->link;
return p1;
}
在函数中,确保处理返回时的情况(指示未找到密钥)。此外,在使用之前分配内存也很重要。下面是更正后的函数:insertafter
position
NULL
new
insertafter
void insertafter(int key)
{
struct node *new = (struct node*)malloc(sizeof(struct node));
if (new == NULL) {
perror("Memory allocation failed");
exit(EXIT_FAILURE);
}
struct node *p1 = position(key);
if (p1 != NULL) {
new->link = p1->link;
p1->link = new;
}
else {
printf("Key not found in the linked list.\n");
free(new); // Free the allocated memory
}
}
确保在实际代码中正确处理内存分配和释放。此外,请正确初始化并考虑列表为空的情况。head
评论
0赞
Fe2O3
10/29/2023
如果一个节点有可能被闲置,为什么要分配它?也许代码需要重新排列一下???而且,也许可以问 OP 如果创建了新节点,应该在新节点中存储什么值?
0赞
Risher322
10/29/2023
是的,我更改了代码.必须存储在新节点中的值是从用户那里获取的。
评论