gpt4 book ai didi

C - 删除链表中的节点

转载 作者:太空宇宙 更新时间:2023-11-04 07:04:51 24 4
gpt4 key购买 nike

我正在编写我的代码中的删除功能。我想删除节点内的 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] != '\0'; 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

关于C - 删除链表中的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33965579/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com