>我正在尝试实现链表遍历,但是我的代码不起作用,我不明白为什么我重新分配了指针,但它没有粘住?
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void inserter(Node *n1, int num){
if(n1==NULL){
Node *temp =(Node*)malloc(sizeof(Node));
temp->data=num;
temp->next=NULL;
n1=temp;
}
else{
Node *trav=n1;
while(trav!=NULL){
trav=trav->next;
}
}
}
int main(int argc, char **argv)
{
Node *l1 = NULL;
inserter(l1,l2,5);
inserter(l1,l2,11);
//It goes back into the NULL bracket despite me assigning it a node?
}
这是随附的结构
typedef anode {
struct Node *next;
int data;
}Node;
感谢您的任何帮助!我对这一切还很陌生。
您正在传递指针和int
inserter()
。如果您修改该int
,则调用函数中将看不到任何修改(我想您已经知道了(。指针也是如此:Node *
只是一个保存地址的数字类型,该地址已按值传递。
如果要修改n1
指向的位置,则需要取消引用它。但是,由于您不想更改n1
指向的内存的内容,而是更改n1
本身的值,因此需要向函数传递Node **
。
下面是一个快速示例:
void inserter(Node **n, int num) {
if (*n == NULL) {
*n = malloc(...);
....;
}
....
}
这样,您将全局更改n
的实际值,而不仅仅是本地值。