目前,我正在尝试编写链表,但是遇到问题。
当我执行以下代码时,它只会打印
当前状态:
因此,我使用gdb并发现当我分配“ iHead = newNode”并返回到main时,head的值没有改变!
问题是相对于通过值/引用传递还是其他?
#include <stdio.h>
#include <stdlib.h>
typedef struct node *nodePtr;
struct node{
int value;
nodePtr next;
};
void print(nodePtr);
void insert(nodePtr, int);
int main(void){
nodePtr head = NULL;
insert(head, 1);
insert(head, 2);
insert(head, 3);
insert(head, 4);
insert(head, 5);
print(head);
return 0;
}
void print(nodePtr iHead){
nodePtr ptr = iHead;
printf("Current state:");
while(ptr){
printf("%d ", ptr->value);
ptr = ptr->next;
}
printf("\n");
}
void insert(nodePtr iHead, int iValue){
nodePtr newNode;
newNode = (nodePtr) malloc(sizeof(struct node));
newNode->value = iValue;
newNode->next = NULL;
if(iHead == NULL)
iHead = newNode;
else{
//find the last node
nodePtr ptr = iHead;
while(ptr -> next)
ptr = ptr->next;
//append new node
ptr -> next = newNode;
}
}
最佳答案
您正在通过价值传递。
因此,函数内所做的更改不会反映在main()中。有两种解决方法。void insert(nodePtr *iHead, int iValue)
通过引用传递给该功能nodePtr insert(nodePtr iHead,int iValue)
在函数中进行更改并返回HEAD
在main()
中完整保留您的列表HEAD
nodePtr HEAD = insert(HEAD,2);