没有动态分配的链表
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;
我在没有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;