关于数据结构单链表 指针 *星号的理解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于数据结构单链表 指针 *星号的理解相关的知识,希望对你有一定的参考价值。

最近在学数据结构
有如下程序:
/*定义节点类型*/
typedef struct Node

DataType data;
struct Node *next;
ListNode, *LinkList;

/*将单链表初始化为空*/*/
void InitList(LinkList *head) /* -----这里*head why?--- */

if((*head = (LinkList)malloc(sizeof(ListNode))) == NULL)

exit(-1);

(*head)->next = NULL;


/*判断单链表是否为空*/
int ListEmpty(LinkList head) /* -----这里没有* 和上面有什么区别?----*/

if(head->data == NULL)
return 1;
else
return 0;

这里的 *head 怎么理解啊?为什么有时候加 * 有时候没有加 * 请高手指点啊

参考技术A typedef struct Node

DataType data;
struct Node *next;
ListNode, *LinkList;

1 .LinkList :是struct Node的结构体指针类型
如: LinkList a 等于 struct Node * a;
2. LinkList *head 等于 struct Node ** head;
3. if((*head = (LinkList)malloc(sizeof(ListNode))) == NULL)

malloc:返回指针类型,强制转换为指定数据类型
4.head 是 LinkList * 类型(等于 struct Node ** 类型),在使用时
*head 就代表 struct Node * (由指向指针的指针,成为了指针,可以方便下面的后续操作)追问

多谢。结合你的回答发出我的理解:
void InitList(LinkList *head) 中 的 “head” 是指针的指针 head 本身是一个指针,但是这个head 里面存放的内容又是一个 LinkList类型

int ListEmpty(LinkList head)中head是LinkList 类型(即指针类型)则 *head(指针取值运算嘛!)就是ListNode类型

追答

对,你理解了,加油!

本回答被提问者采纳

以上是关于关于数据结构单链表 指针 *星号的理解的主要内容,如果未能解决你的问题,请参考以下文章

单链表的基本操作实现

数据结构单链表创建单链表函数总是报错指针变量未被初始化怎么解决?

双链表(二)

基础数据结构——单链表

对于"单链表逆置和递归"的问题的理解.

408数据结构与算法—单链表