我在添加到动态链接列表时遇到了一些问题。基本上似乎我的第一个节点被覆盖了。这是代码:
struct palNode {
int number;
int pointer_index;
char* solving_array;
int solved;
struct palNode* next;
}
这是我的添加方法:
struct palNode* add_palNode_from_keyboard(struct palNode* head, int num, int pos){
struct palNode* newnode = (struct palNode*) malloc(1 * sizeof(struct palNode));
struct palNode* current_node = head;
if (current_node == NULL)
{
head = newnode;
}
else
{
while ((*current_node).next != NULL)
{
current_node = (*current_node).next;
}
(*current_node).next = newnode;
}
(*newnode).number = num;
(*newnode).pointer_index = pos;
(*newnode).next = NULL;
printf("Operation completed\n");
return newnode;
}
以下是我的问题:我做错了什么?有没有更正确的方法呢?我见过其他类似的问题,但我仍然没有得到它们
答案 0 :(得分:1)
如果列表最初为空,则将head
设置为新节点,但指针head
按值传递,因此更改为不会出现在调用函数中。< / p>
您需要传入头指针的地址并对其进行修改,以便更改出现在函数外部:
struct palNode* add_palNode_from_keyboard(struct palNode** head, int num, int pos){
// no cast needed here, and no need to multiply by 1
struct palNode* newnode = malloc(sizeof(struct palNode));
struct palNode* current_node = *head;
if (current_node == NULL)
{
*head = newnode;
}
...