关于单链表头插法的问题

为什么我这里的编译器用引用符号反而是错误的 我用c语言写的后面改成*也报错 但是我看大家都说要修改指针的值得加引用我也是非常认同 但是今天实操却发生这样的问题 不加星却可以完成头插法建立链表
img
上面这幅图是加了引用符号报错的 下面这个是不加反而能运行的
img
这是结构体的代码
img

不用引用肯定可以头插法啊,返回值那边返回表头即可。但是你这个根本不是头插。

因为引用应该携带地址。

这个Linklist是指针变量,不是数据类型,把上面定义结构体的代码发出来看看。

供参考:方法一

//方法一:
#include<stdio.h>
#define max 10

typedef struct Lnode{
    int    data;
    struct Lnode *next;
}Lnode,*Linklist;

int data[max]={1,2,3,4,5,6,7,8,9,0};

Linklist creatlist(Linklist L)
{
    L = (Linklist)malloc(sizeof(Lnode));
    if(L == NULL)  printf("false");
    L->next=NULL;
    Linklist s;
    int i;
    for(i=0;i<max;i++) {
        s =(Lnode*)malloc(sizeof(Lnode));
        s->data=data[i];
        s->next=L->next;
        L->next = s;
    }
    return L;
}

int main()
{
    Linklist L,p;
    L = creatlist(L);
    p = L->next;
    while(p){
          printf("%d ",p->data);
          p = p->next;
    }
    printf("\n");
    return 0;
}

方法二:

//方法二:地址引用
#include<stdio.h>
#define max 10

typedef struct Lnode{
    int    data;
    struct Lnode *next;
}Lnode,*Linklist;

int data[max]={1,2,3,4,5,6,7,8,9,0};

Linklist creatlist(Linklist& L)
{
    L = (Linklist)malloc(sizeof(Lnode));
    if(L == NULL)  printf("false");
    L->next=NULL;
    Linklist s;
    int i;
    for(i=0;i<max;i++) {
        s =(Lnode*)malloc(sizeof(Lnode));
        s->data=data[i];
        s->next=L->next;
        L->next = s;
    }
}

int main()
{
    Linklist L,p;
    creatlist(L);
    p = L->next;
    while(p){
          printf("%d ",p->data);
          p = p->next;
    }
    printf("\n");
    return 0;
}

方法三:

//方法三:地址传参
#include<stdio.h>
#define max 10

typedef struct Lnode{
    int    data;
    struct Lnode *next;
}Lnode,*Linklist;

int data[max]={1,2,3,4,5,6,7,8,9,0};

Linklist creatlist(Linklist* L)
{
    (*L) = (Linklist)malloc(sizeof(Lnode));
    if((*L) == NULL)  printf("false");
    (*L)->next=NULL;
    Linklist s;
    int i;
    for(i=0;i<max;i++) {
        s =(Lnode*)malloc(sizeof(Lnode));
        s->data=data[i];
        s->next=(*L)->next;
        (*L)->next = s;
    }
}

int main()
{
    Linklist L,p;
    creatlist(&L);
    p = L->next;
    while(p){
          printf("%d ",p->data);
          p = p->next;
    }
    printf("\n");
    return 0;
}

img
同时有一点要注意:

你加&相当于引用,而引用是C++中的概念,通俗的说就是给变量起别名。而引用不能作用与一级指针

img