void CreateList(LinkList &L)
时间: 2023-08-07 20:04:02 浏览: 128
这是一个函数声明,是用来创建单链表的。其中 LinkList 是单链表的指针类型,&L 是指向单链表头结点的指针的引用,函数名为 CreateList。
在函数体内,需要进行以下操作:
1. 创建头结点,并将头结点的指针赋值给 L。
2. 循环读入数据,每读入一个数据就创建一个新的节点,将数据存入节点中,并将节点插入到链表的末尾。
3. 读入数据结束后,在链表的末尾插入一个特殊的节点,用于表示链表的结束。
具体的实现可以参考下面的代码示例:
```
void CreateList(LinkList &L) {
L = new ListNode; // 创建头结点
L->next = NULL; // 头结点的指针域置为 NULL
ListNode *p = L; // p 指向链表的最后一个节点
int x;
while (cin >> x) { // 循环读入数据
ListNode *q = new ListNode; // 创建新节点
q->data = x; // 将数据存入节点中
q->next = NULL;
p->next = q; // 将节点插入到链表的末尾
p = q; // p 指向链表的最后一个节点
}
ListNode *q = new ListNode; // 创建链表结束节点
q->next = NULL;
p->next = q; // 将链表结束节点插入到链表的末尾
}
```
相关问题
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;
}
CreateList_L(LinkList&L, int n)函数实现单链表的创建。
好的,我可以给您讲解一下CreateList_L函数的实现原理。
CreateList_L函数的作用是创建一个含有n个结点的单链表,并将该链表的头指针存放在L中。下面是CreateList_L函数的代码实现:
```
void CreateList_L(LinkList& L, int n) {
L = (LinkList)malloc(sizeof(LNode)); // 创建头结点
L->next = NULL; // 初始化链表为空
LinkList p, tail = L; // p指向当前结点,tail始终指向尾结点
for (int i = 0; i < n; i++) { // 循环创建n个结点
p = (LinkList)malloc(sizeof(LNode)); // 创建新结点
scanf("%d", &p->data); // 输入新结点的值
p->next = NULL; // 新结点指针域置为空
tail->next = p; // 尾结点指向新结点
tail = p; // 更新尾结点
}
}
```
以上是CreateList_L函数的完整代码实现,函数的主要流程如下:
1. 创建头结点,并将其存放在L中;
2. 循环创建n个结点,每个结点的值由用户输入;
3. 将新结点插入到链表的尾部,更新尾结点。
这样,CreateList_L函数就可以成功地创建一个含有n个结点的单链表,并将其头指针存放在L中。
阅读全文