目前,我正在尝试编写链表,但我遇到了一个问题。 当我执行下面的代码时,它只是打印
现状:
所以我使用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;
}
}
答案 0 :(得分:1)
你正在按值传递。
因此,在函数内完成的更改不会反映在main()中。有两种方法可以解决这个问题。
void insert(nodePtr *iHead, int iValue)
通过参考此函数
nodePtr insert(nodePtr iHead,int iValue)
更改功能并返回HEAD
在main()
中,您的列表HEAD完好无损
nodePtr HEAD = insert(HEAD,2);