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

4ktjp1zp  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(118)
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();
}

字符串
我想把函数position中p1的值返回给insertafter()。那么position的返回类型是什么,因为它返回的是一个结构节点,我应该如何给予return语句。Key是我必须插入新节点的值。

92vpleto

92vpleto1#

看来你的思路是对的!不过,还有一些地方需要修正。
position函数中,你应该处理headNULL的情况,以避免解引用空指针。另外,你不需要在这个函数中为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之前必须为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并考虑列表为空的情况。

相关问题