单链表中什么时候使用二级指针

在使用单链表时,一直有一个疑惑,初始化单链表时为什么要用二级指针?

代码如下:

typedef int ElemType;/* ElemType类型根据实际情况而定,这里假设为int */
typedef struct Node
{
	ElemType data;
	struct Node * next;
}Node, *LinkList;/*LinkList为结构指针类型*/

void InitList(LinkList *L)	/* 等价于Node **L,二级指针  */
{
	*L = (LinkList)malloc(sizeof(Node));//建立头结点
	(*L)->next = NULL;//建立空的单链表
}

在初始化过程中,需要修改头指针,因此要用到二级指针传递头指针的地址,这样才能修改头指针。这与普通变量类似,当需要修改普通变量的值,需传递其地址。使用二级指针,很方便就修改了传入的结点一级指针的值。 如果用一级指针,则只能通过指针修改指针所指内容,却无法修改指针的值,也就是指针所指的内存块。

用框图表示链表中二级指针或者一级指针的使用

总结:
在使用带头结点的单链表时
1、初始化链表头部指针需要用二级指针
2、销毁链表需要用到二级指针
3、插入、删除、遍历、清空结点用一级指针即可

注意:
如果是不带头结点的单链表,插入、删除和清空结点也需要二级指针(比如往空链表中插入一个节点时,新插入的节点就是链表的头指针,此时会改动头指针。同理,删除第一个结点和清空结点都会改动头指针)。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值