如何删除链表中的表头节点?C



所以我在C中有一个链表堆栈作为不透明对象。我将一个指向函数的头指针指针传入。

这是删除头函数的代码。我称之为流行

MY_STACK pop(MY_STACK* head) {  
    Node_ptr hHead = (Node_ptr)head;
    if (*head == NULL){
        printf("badness n");
        return FAILURE;
    }

    hHead = hHead->next;
    return SUCCESS;
}

这行不通。它不会删除头节点。其实我可以。但是当我这样做的时候,头节点没有切换到下一个,程序崩溃了,因为没有头哈哈。我该如何将头切换到下个。因为它不起作用。这是一个节点指针指针。它是称为CCD_ 1的节点的公共版本。我不知道你对不透明物体有多熟悉,但为了这个,我需要这样做。我不能把所有的东西放在一起,我知道如何用它删除标题,但这里不起作用

这是MY_STACK头文件。Node_ptr是私有版本,它保存相同的东西+数据和下一个字段。我必须将MY_sTACK强制转换为Node_ptr才能访问这些东西。

    #ifndef MY_STACK_H
#define MY_STACK_H
#include "my_status.h"
enum boolean {FALSE, TRUE};
typedef enum boolean Bool;
struct my_stack_public;
typedef struct my_stack_public* MY_STACK;
struct my_stack_public
{
    void (*destroy)(MY_STACK* phMy_stack);
    Status (*push)(MY_STACK* hMy_stack, char item);
    Status (*pop)(MY_STACK* hMy_stack);
    char (*top)(MY_STACK hMy_stack);
    Bool (*empty)(MY_STACK hMy_stack);
};
MY_STACK my_stack_init_default(void);
#endif

我有一个有效的插入函数。它改变了头部。但由于某些原因,pop函数无法完成

函数的返回类型为MY_STACK。我怀疑它是指向节点的指针的typedef。所以函数必须返回一个指向节点的指针。

的外观如下

MY_STACK pop( MY_STACK *head )
{
    MY_STACK node = *head;
    if ( *head != NULL ) *head = ( *head )->next;
    return node;
}

如果功能必须删除当前头的节点,并返回操作的成功或失败,则该功能可能看起来像

int pop( MY_STACK *head )
{
    if ( *head != NULL ) 
    {
        MY_STACK node = *head;
        *head = ( *head )->next;
        free( node );
        return SUCCESS;
    }
    else
    {
        return FAILURE;
    }
}

其中SUCCESS和FAILURE是一些整数常量。

建议使用指针MY_STACK作为返回类型,试试这个:

MY_STACK pop(MY_STACK* head) {
    MY_STACK tmpHead = *head;
    if ((*head) == NULL) {
        printf("badnessn");
        return NULL;
    } else {
        *head = (*head)->next;
        tmpHead -> next = NULL;
        return tmpHead;
    }
}

相关内容

  • 没有找到相关文章

最新更新