#include<iostream>
using namespace std
;
typedef struct Node
{
char data
;
Node
* next
;
}Node
,*LinkList
;
void InitList(LinkList
* L
)
{
*L
= (LinkList
)malloc(sizeof(Node
));
(*L
)->next
= NULL;
}
void create_From_Head(LinkList L
)
{
Node
* s
;
char c
;
int flag
= 1;
while (flag
)
{
cin
>> c
;
if (c
!= '#')
{
s
= (LinkList
)malloc(sizeof(Node
));
s
->data
= c
;
s
->next
= L
->next
;
L
->next
= s
;
}
else flag
= 0;
}
}
void print(LinkList L
)
{
LinkList temp
= L
->next
;
while (temp
!= NULL)
{
cout
<< temp
->data
<< " ";
temp
= temp
->next
;
}
cout
<< "End of the total run" << endl
;
}
void deList(LinkList
*L
)
{
LinkList q
,p
= *L
;
while (p
!= NULL)
{
q
= p
->next
;
delete p
;
p
= q
;
}
*L
= NULL;
}
int main(void)
{
LinkList List
, * L
= &List
;
InitList(L
);
List
->data
= 'H';
create_From_Head(List
);
print(List
);
printf("%p %c\n",List
,List
->data
);
deList(&List
);
InitList(L
);
create_From_Head(List
);
print(List
);
return 0;
在初始化的操作中,是给头指针(空的,里面没有数据,只有一个指针有值),赋一个地址,是修改指针的值,必须采用二级指针的传参方式,否则在函数中就是使用的一个副本进行值得传递。
同样的在删除操作中,delete函数是将一个指针所指向的内存所释放,并不会修改指针的值,所以删除函数中的delete操作可以使用一级指针,但是在释放头结点的时候,为了避免利用头指针访问一个被释放了的不可访问的内存,必须将头指针的值修改为NULL,也就是修改了指针的值,必须使用二级指针的传参方式。(否则,就会导致头指针指向的内存被释放了,但是地址却没有发生改变,还是指向原来的那块内存)