链表的实现 带头结点

typedef struct node_s {
    int val;
    struct  node_s* next;
}Node_t;

typedef struct linkedList_s {
    Node_t* head;
    //int size;
}LinkedList_t;

//创建链表
LinkedList_t* create()
{
    return calloc(1, sizeof(LinkedList_t));
}

//头插法函数
bool headadd(LinkedList_t* list,int val)
{
    Node_t* newCode = malloc(sizeof(Node_t));
    if (NULL == newCode)
    {
        return false;
    }
    newCode->val = val;

    if (list->head == NULL)
    {
        newCode->next = NULL;
        list->head = newCode;
        //list->size++;
    }
    else
    {
        newCode->next = list->head;
        list->head = newCode;
    }


    return true;
}

//删除结点
bool removenode(LinkedList_t* list, int val)
{
    Node_t* prev = NULL;
    Node_t* curr = list->head;

    while (curr != NULL && curr->val != val)
    {
        prev = curr;
        curr = curr->next;
    }
    if (curr == NULL)
    {
        return false;
    }
    //删除头节点
    if (prev == NULL)
    {
        list->head = curr->next;
    }
    else
    {
        prev->next = curr->next;
    }
    free(curr);
    return true;
}

  
  //回收链表内存
void destroy(LinkedList_t* list)
{
while (list->head)
{
Node_t* p = list->head;
list->head = list->head->next;
free(p);
}
free(list);
}

 

 

posted @ 2022-02-10 21:37  晓风霜度-  阅读(67)  评论(0)    收藏  举报