#include<stdio.h>
#include<stdlib.h>
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
需要知道的是LinkList类型是一个指针,指向的是LNode结构体。
当需要对L本身的值进行改变时(就是L指向一个新的地址),就需要传的是LinkList &L
如果传的是L那么不能改变L只能改变L所指向的内容
例如:
方法参数是L:
void CreateList(LinkList L){
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
int i=1;
while(i!=2020){
scanf("%d\n",&i);
LNode *p;
p=(LNode *)malloc(sizeof(LNode));
p->data=i;
p->next=L->next;
L->next=p;
}
printf("输入结束\n");
}
int main(){
LinkList L=NULL;
CreateList(L);
LNode *p=L->next;
while(p!=NULL)
{
printf("%d\n",p->data);
p=p->next;
}
return 0;
}
什么都没有,意思是L还是NUll因为这样传递只能改变L指向的节点,不能改变L本身。
方法参数是&L:
void CreateList(LinkList &L){
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
int i=1;
while(i!=2020){
scanf("%d\n",&i);
LNode *p;
p=(LNode *)malloc(sizeof(LNode));
p->data=i;
p->next=L->next;
L->next=p;
}
printf("输入结束\n");
}
int main(){
LinkList L=NULL;
CreateList(L);
LNode *p=L->next;
while(p!=NULL)
{
printf("%d\n",p->data);
p=p->next;
}
return 0;
}
这样就会输出结果。
对于遍历列表如何传L呢?是加&还是不加呢,代码如下:
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
void CreateList(LinkList &L){//新建 链表的函数
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
int i=1;
while(i!=2020){
scanf("%d\n",&i);//不知怎么回事,输入2020之后还需要再输一个数
LNode *p;
p=(LNode *)malloc(sizeof(LNode));
p->data=i;
p->next=L->next;
L->next=p;
}
printf("输入结束\n");
}
void Bianli(LinkList &L){//遍历链表的函数
printf("遍历列表\n");
LNode *p=L->next;
while(p!=NULL)
{
printf("%d\n",p->data);
p=p->next;
}
}
int main(){
LinkList L=NULL;
CreateList(L);
Bianli(L);
}
可以看出如果方法的参数是&L的话是可以遍历的;
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
void CreateList(LinkList &L){//新建 链表的函数
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
int i=1;
while(i!=2020){
scanf("%d\n",&i);//不知怎么回事,输入2020之后还需要再输一个数
LNode *p;
p=(LNode *)malloc(sizeof(LNode));
p->data=i;
p->next=L->next;
L->next=p;
}
printf("输入结束\n");
}
void Bianli(LinkList L){//遍历链表的函数
printf("遍历列表\n");
LNode *p=L->next;
while(p!=NULL)
{
printf("%d\n",p->data);
p=p->next;
}
}
int main(){
LinkList L=NULL;
CreateList(L);
Bianli(L);
}
如果是参数L的话也是可以遍历的
因此可以得出结论:L
如果对列表的头指针(L)本身进行改变的话,方法的参数的是&L,不然此方法无效。如果只是改变的是L所指向的内容的话,可以是&L也可以是L。
主方法体都是方法名(L)。
其实与int指针是一样的,想改变值只能传地址,不能传变量,只是这里的变量换成了节点指针变量
https://www.bilibili.com/read/cv6146383 出处:bilibili
版权声明:本文为m0_57741101原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。