如何在链表中返回结构节点指针

How to return a struct node pointer in linked list

提问人:Risher322 提问时间:10/29/2023 更新时间:10/29/2023 访问量:38

问:

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 是我必须插入新节点的值。

c 函数 返回 节点 singly-linked-list

评论


答:

0赞 Milinda Shehan 10/29/2023 #1

看来你走在正确的轨道上!但是,需要进行一些更正。

在函数中,应处理以下情况:when 以避免取消引用 null 指针。此外,您无需在此函数中分配内存。下面是更正后的函数:positionheadNULLnewposition

    struct node* position(int key)
    {
        struct node *p1 = head;
    
        while (p1 != NULL && p1->info != key)
            p1 = p1->link;
    
        return p1;
    }

在函数中,确保处理返回时的情况(指示未找到密钥)。此外,在使用之前分配内存也很重要。下面是更正后的函数:insertafterpositionNULLnewinsertafter

    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
是的,我更改了代码.必须存储在新节点中的值是从用户那里获取的。