C-删除链接列表中的节点



我正在代码中处理一个删除函数。我想删除节点中的key, value对,并释放分配给它的空间。我不知道如何处理这个问题,以便下面的节点转移到正确的位置(不知道如何拼写,希望你知道我的意思)。这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <assert.h>
#include "symTable.h"
#define DEFAULT_TABLE_SIZE 61
#define HASH_MULTIPLIER 65599
/*Structures*/
typedef struct Node
{
    char *key;
    void *value;
    struct Node *next;
} Node_T;
typedef struct SymTable
{
    Node_T **Table;
    int tablesize;
    int counter;
} *SymTable_T;
/*Global Variables*/
int tablesize = DEFAULT_TABLE_SIZE;
int counter = 0;
/*Create function to show how memory is allocated*/
SymTable_T SymTable_create(void)
{
    SymTable_T S_Table;
    S_Table = malloc(sizeof(SymTable_T *) * DEFAULT_TABLE_SIZE);
    S_Table->Table = (Node_T **) calloc(DEFAULT_TABLE_SIZE, sizeof(Node_T *));
    return S_Table;
}
/*Hash Function*/
static unsigned int hash(const char *key, const int tablesize)
{
    int i;
    unsigned int h = 0U;
    for (i = 0; key[i] != ''; i++)
        h = h * tablesize + (unsigned char) key[i];
    return h % tablesize;
}
/*Delete Function*/
int symTable_delete(SymTable_T symTable, const char *key)
{
    Node_T *new_list;
    unsigned int hashval = hash(key, DEFAULT_TABLE_SIZE);
    free(new_list->key);
    free(new_list->value);
    //here is where I am stuck, how can I make it so the nodes following the one deleted go to the right space?
}

有了一个单链表,你就有了

A->B->C

如果你想删除B,那么你需要制作

A->C

唯一的方法是获取B的父级并更新其指针,这意味着

  1. 您需要添加一个从节点到其父节点的指针(也就是使用双链表)
  2. 迭代列表,直到找到子指针设置为要删除的节点的节点,然后将指针更新为指向child.child

相关内容

  • 没有找到相关文章

最新更新