分配新节点后根节点的值(空值)没有改变
The value of root node(null value) didn't change after assigning a new node
目前正在尝试写链表,但是遇到了问题。
当我执行下面的代码时,它只是打印
Current state:
所以我用gdb发现当我把"iHead = newNode"和return赋值给main时,head的值没有变化!
问题是相对于路过 value/reference 还是其他什么???
#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)
在函数中进行更改 return HEAD
在 main()
中让你的列表 HEAD 完好无损
nodePtr HEAD = insert(HEAD,2);
目前正在尝试写链表,但是遇到了问题。 当我执行下面的代码时,它只是打印
Current state:
所以我用gdb发现当我把"iHead = newNode"和return赋值给main时,head的值没有变化! 问题是相对于路过 value/reference 还是其他什么???
#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)
在函数中进行更改 return HEAD
在 main()
中让你的列表 HEAD 完好无损
nodePtr HEAD = insert(HEAD,2);