#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 create_From_Tail(LinkList L)
{
LinkList s, r = L;
int flag = 1;
char c;
while (flag)
{
cin >> c;
if (c != '#')
{
s = (LinkList)malloc(sizeof(Node));
s->data = c;
r->next = s;
r = s; // 这里将尾巴断开了 最后一个元素之后指向的区域未知
}
else
{
flag = 0;
r->next = NULL;// 将尾巴补充完整 可以完成完成的遍历过程
}
}
}
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; // delete一个指针是释放其指向的内存区域 指针的值就会变成一个随机值 (野指针)
p = q;
}
L = NULL; //头结点指向的内存已经都给扬了 可以delete头指针
//所有的结点都被delete了一次 所有的指针指向的内存都被释放了一次 这一系列的指针都成为了野指针
}
int main(void)
{
//Node S;
//LinkList List = &S, * L = &List;
//List->next = NULL;
LinkList List, * L = &List;
InitList(L); //初始化指针是修改指针的值 必须使用双指针否则 就会在初始化函数里面被创建一个副本 无法将修改真正实现
create_From_Head(List);
print(List);
//deList(List);
create_From_Tail(List);
print(List);
return 0;
}
问题我写在代码的最后deList里面了 代码太长了 麻烦给位大佬看看
想了好久了都没想过