没有动态分配的链表

Linked list without dynamic allocation

我在没有malloc的情况下在链表中添加和删除节点时遇到了一些问题。我删除节点然后再次添加节点并打印列表但没有任何反应。我尝试检查 add_node 功能,它正常工作,但我无法检查 del_node。这是我的代码:


#include <stdio.h>
#include <stdint.h>

#define MAX_NODES        20

typedef struct node
{
    uint8_t value;
    struct node *next;
}
node;

static node node_arr[MAX_NODES] = {[0 ... 19] = 0};
static uint8_t next_node = 0;

void Add_Node(node **head, uint8_t val, uint8_t index)
{
    node *new_node = &(node_arr[index]);  
    next_node++;
    new_node->value = val;
    new_node->next = *head;    /* New node will point the current head*/
    *head = new_node;    /* Make new node become head of the list */
}

void Del_Node(node **head, uint8_t index)
{
    uint8_t run = 0;    /* Use run for reaching position */
    node *temp = *head;
    while((temp->next!= NULL) && (run != index)){
        temp = temp->next;
        run++;
    }
    temp = temp->next;   /* Let current node become next node */
    next_node --;
}

int main(){
    node *head = NULL;
    Add_Node(&head, 2, 1);
    Add_Node(&head, 3, 2);
    Add_Node(&head, 4, 3);
    Add_Node(&head, 5, 4);
    Del_Node(&head, 3); // position 3 mean value 3 of list
    for (node *temp = head; temp != NULL; temp = temp->next)
    {
          printf(" %d ", temp->value);
    }
}

谢谢大家

关于您的删除功能: 此代码行没有执行我认为您希望它执行的操作:

temp = temp->下一步;

你正在尝试更改局部变量,当你超出函数范围时无论如何都会丢失

试试这个修复: 初始化 temp 后添加此行

node *prev = temp

在你的 while 循环中,第一行应该是:

prev = temp;

然后在循环外改为:

temp = temp->下一步;

输入这一行:

prev->next = temp->next;