采用二级指针对链表进行初始化(C++)

我们对链表进行初始化时:主要有两种方法

1)采用一级指针对链表进行初始化
(2)采用二级指针对链表进行初始化

我们一般采用第一种方法的比较多,特别是对于刚刚接触链表的萌新,或者对于指针的理解不是很熟悉的萌新。

typedef struct link_list
{
	int data; 				//结构体中的元素
	struct link_list *next; //指向下一个节点
}link_list_t;

我们对链表进行初始化,一般采用一级指针的方法,如下代码所示:
优点:易理解,对于刚入门的萌新
特点,初始化函数要有返回值,而且要接收已经分配内存的list,才能完成初始化,如下所示

//链表的初始化,一级指针的方法(一般做法)
link_list_t* list_init(link_list_t *list)
{
	
	if (!list)
	{
		list = new link_list_t;
		list)->data = 0;
		list)->next = NULL;
		return list;
	}
	else
	{
		printf("链表已经存在!不用进行初始化\n");
		return 0;
	}
}

int main()
{
	link_list_t *link_list = NULL;
	link_list = list_init(link_list)//要接收已经分配内存的list,才能完成初始化
	if (link_list)
	{
		printf("链表初始化成功!\n");
	}
	return 0;
}

那么二级指针怎么使用来初始化呢?
也简单,初始化函数中的形参采用二级指针就行了,相当于对传入的实参对其地址进行操作。

link_list_t *link_list = NULL;

void list_init(link_list_t **list);//初始化函数

list_init(&link_list); //传入链表的地址

如上,初始化函数中的形参是二级指针,而我们的结构体指针link_list 为一级指针,所以我们要传入link_list 的地址,那怎么访问二级结构体中指针的元素呢?使用(*list)访问就行了,访问二级结构体中指针的元素时,不能这样子直接*list, 因为->的优先级比*要高,会报错

优点:
1.直接操作内存,不需要接收返回值,速度快
2.高逼格
完整代码如下

//链表初始化, 二级指针
void list_init(link_list_t **list)
{
	if (!(*list))
	{
		(*list) = new link_list_t;
		(*list)->data = 0;
		(*list)->next = NULL;
	}
	else
	{
		printf("链表已经存在!\n");
	}
}
int main()
{
	link_list_t *link_list = NULL;
	list_init(&link_list); //传入链表的地址
	if (link_list)
	{
		printf("链表初始化成功!\n");
	}
	return 0;
}

有什么疑惑欢迎评论区留言哦!

你可能感兴趣的:(C++,c,链表,指针,算法,数据结构)