链表中LinkList &L和LinkList L的区别

文章讲述了在使用严蔚敏《数据结构》中关于LinkList的函数时,InitList使用&L的原因是改变指针本身,而CreateList_L使用L是因为只改变所指链表内容。通过实例解释了在处理链表操作时,如何根据需求选择正确参数类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在学习严蔚敏的《数据结构》线性表章节时,发现其中的函数参数有时是LinkList L,有时是LinkList &L,让人十分疑惑。在此记下原因。

typedef struct LNode{
	int data;
	struct LNode *next;
}LNode,*LinkList;

void InitList(LinkList &L){
	L = (LinkList)malloc(sizeof(LNode));  //创建头结点
	if (!L) exit(-1);
	L->next = NULL; 
}

void CreateList_L(LinkList L,int n){  //头插法 
	for (int i=n;i>0;i--)
	{
		LinkList p = (LinkList)malloc(sizeof(LNode));  //生成新结点 
		scanf("%d",&p->data);  //输入元素值
		p->next = L->next;
		L->next = p;  //插到表头 
	}
}

为什么InitList(LinkList &L)但CreateList_L(LinkList L,int n)?有什么区别?

1、InitList(LinkList &L)

一般情况,向函数传递指针类型的参数,可以让函数改变指针指向的内容,并将改变的效果返回;这里要改变指针变量L本身的值,使它指向新开辟的内存空间L =   (LinkList)malloc(sizeof(LNode)),而不是要改变L所指向的内容(即链表)的值,即用&L。

2、CreateList_L(LinkList L,int n)

如上所说,这里只需改变L所指向的内容(即链表)的值,不需改变指针变量L本身的值,即用L。

总结

(1)当只需改变指针所指向的内容,不需改变指针的值时,用LinkList L。

(2)当需要改变指针的值时,用LinkList &L。此时,既可改变指针本身的值,又可改变指针所指向的内容。

追加:这里的指针变量本身的值是指针的地址!

深度理解

栗子:

将一个头结点为A的单链表分解为A(含原链表data域为奇数的结点),B(含原链表data域为偶数数的结点)两个链表。

这题的函数:Divide(LinkList A,LinkList &B);

因为数据为奇数的节点,可以继续跟随地址为A的头结点,而偶数的节点,要单拎出来,跟在B后面的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值