我在添加到动态链表时遇到了一些问题。基本上,我的第一个节点似乎被覆盖了。这是代码:
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 completedn");
return newnode;
}
我的问题是:我做错了什么?有更正确的方法吗?我看到了其他类似的问题,但我仍然没有得到它们
如果列表最初为空,则将head
设置为新节点,但指针head
是按值传递的,因此对它的更改不会出现在调用函数中。
您需要传入头指针的地址并进行修改,以便在函数之外出现更改:
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;
}
...