什么意思 bool InitList(LinkList &L)
时间: 2024-05-18 20:17:55 浏览: 11
`bool InitList(LinkList &L)` 是一个函数声明,它的作用是初始化一个单链表。
其中,`LinkList` 是一个结构体指针类型,表示单链表的头结点。`&L` 表示传入该函数的参数是一个指向 `LinkList` 类型的指针,使用引用传递的方式将其传入函数中。
该函数的返回值为 `bool` 类型,表示函数执行成功或失败。通常情况下,如果函数执行成功,会返回 `true`;如果执行失败,会返回 `false`。
在函数内部,会对传入的单链表进行初始化操作,包括将头结点的指针域置为 `NULL`,从而使其指向一个空链表。
相关问题
请将LinkList &L改成LinkList *L而不出bug:#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> typedef struct LNode { int data;//数据域 struct LNode *next;//指针域 }LNode,LinkList; bool InitList(LinkList &L)//初始化单链表 { L = (LNode)malloc(sizeof(LNode));//分配一个头节点 if (L == NULL) return false;//内存不足,分配失败 L->next = NULL;//头节点之后还没有节点 return true; }
将代码中的"LinkList &L"改为"LinkList *L"即可,修改后的代码如下:
```
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode {
int data;//数据域
struct LNode* next;//指针域
}LNode, * LinkList;
bool InitList(LinkList* L)//初始化单链表
{
*L = (LNode*)malloc(sizeof(LNode));//分配一个头节点
if (*L == NULL)
return false;//内存不足,分配失败
(*L)->next = NULL;//头节点之后还没有节点
return true;
}
```
typedef struct Lnode { struct Lnode* next; int data; }Lnode, * LinkList; void InitList(LinkList & L) { L = new Lnode; L->next = NULL; }
L)
{
L = NULL; // 将头指针置为 NULL,表示链表为空
}
void CreateList(LinkList& L, int n)
{
Lnode* p, * q;
L = new Lnode; // 创建头结点
L->next = NULL;
q = L;
for (int i = 0; i < n; i++)
{
p = new Lnode; // 创建新节点
cin >> p->data;
p->next = NULL;
q->next = p;
q = p; // 将新节点插入到链表尾部
}
}
void DestroyList(LinkList& L)
{
Lnode* p, * q;
p = L;
while (p != NULL)
{
q = p->next;
delete p;
p = q; // 释放链表中所有节点的内存空间
}
L = NULL;
}
int ListLength(LinkList L)
{
int len = 0;
Lnode* p = L;
while (p->next != NULL)
{
len++;
p = p->next;
}
return len;
}
bool ListEmpty(LinkList L)
{
return L->next == NULL;
}
void GetElem(LinkList L, int i, int& e)
{
Lnode* p = L->next;
int j = 1;
while (p != NULL && j < i)
{
p = p->next;
j++;
}
if (p == NULL || j > i)
{
cout << "Error: out of range" << endl;
return;
}
e = p->data;
}
int LocateElem(LinkList L, int e)
{
Lnode* p = L->next;
int i = 1;
while (p != NULL && p->data != e)
{
p = p->next;
i++;
}
if (p == NULL)
return 0;
else
return i;
}
void ListInsert(LinkList& L, int i, int e)
{
Lnode* p = L;
int j = 0;
while (p != NULL && j < i - 1)
{
p = p->next;
j++;
}
if (p == NULL || j > i - 1)
{
cout << "Error: out of range" << endl;
return;
}
Lnode* q = new Lnode;
q->data = e;
q->next = p->next;
p->next = q; // 在第 i 个位置插入元素 e
}
void ListDelete(LinkList& L, int i, int& e)
{
Lnode* p = L;
int j = 0;
while (p->next != NULL && j < i - 1)
{
p = p->next;
j++;
}
if (p->next == NULL || j > i - 1)
{
cout << "Error: out of range" << endl;
return;
}
Lnode* q = p->next;
e = q->data;
p->next = q->next;
delete q; // 删除第 i 个位置的元素,并将其值赋给 e
}
void ListTraverse(LinkList L)
{
Lnode* p = L->next;
while (p != NULL)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
}