#include <iostream>
using namespace std;
typedef struct LNode
{
int data;
struct LNode * next;
}LNode, * Listlist;
//bool init(Listlist & L,int i) //尾插法
//{
// LNode *new_node, *temp_node;
// temp_node = L;
// for (int num = 0; num < i; num++)
// {
// new_node = new LNode;
// new_node->next = NULL;
// cin >> new_node->data;
// temp_node->next = new_node;
// temp_node = new_node;
// }
//}
bool init(Listlist & L, int i) //头插法
{
LNode * new_item, * temp_item;//申明一个暂时的节点的指针,然后一个向下传的界点的指针
temp_item = L;//将这个临时的节点当成是一个乡下传递的一个指针
int num;//数量
for (num = 0; num < i; num++)
{
new_item = new LNode;//申明一个新的节点
new_item->next = NULL;//将末尾置为空
cin >> new_item->data;//输入这个新节点的值
new_item->next = L->next;//将新节点指向第一个节点的地址
L->next = new_item;//将头节点指向这个新的节点
}
return true;//返回正确
}
bool destroy(Listlist &L)
{
Listlist temp;//临时的指针
temp = L->next;//指向第一个节点
while (temp)//判断这个节点是不是空的,并作为一个结束条件
{
L->next = L->next->next;//将头结点的下一个指针,指向下下个节点
free(temp);//释放单独提出来的节点
temp = L->next;//临时节点指向下一个节点
}
return true;//返回正确
}
bool listempty(Listlist L)
{
return L->next ? false : true;//如果头指针的指向下一个节点的指针为空的话呢,那么这个就是一个空的链表.
}
int listlength(Listlist & L)
{
Listlist temp;
temp = L->next;//将头指针指向的一个节点,当做是第一个节点。
int num = 1;//并赋值为1
while (temp)//将temp作为一个判断是否为空的一个条件
{
temp = temp->next;//指向下一个,就像在数数一样
num++;//数目加一
}
return num - 1;//因为最后一个数到的数是空指针所索引的数
}
bool getitem(Listlist L, int index, int &item)
{
if (index < 1 && index>listlength(L))//先判断这个条件是不是成立的,符不符合我们的输入的条件
{
return false;//如果不符合,我们就返回这个错误的
}
LNode * temp;//申明的是一个临时节点的指针
temp = L->next;//指向第一个节点
int num = 1;//并且将这个节点的标号为1
while (temp&&num < index - 1)//一个是将这个指针是不是空的作为一个判断条件,然后将这个是不是到了,这个后面当做是一个判断的条件
{
temp = temp->next;//将这个节点的值,指向下一个节点
num++;//数目加一
}
if (!temp || num >= index - 1)
{
return false;
}
item = temp->data;
return true;
}
bool locateitem(Listlist L, int index, int item)
{
if (index<1 && index>listlength(L))
{
return false;
}
LNode * temp=L->next;
int num = 1;
while (temp&&num < index - 1)
{
temp = temp->next;
num++;
}
return item == temp->data ? true : false;
}
bool listinsert(Listlist &L, int index, int item)
{
if (index<1 && index>listlength(L))
{
return false;
}
LNode * temp=L;
int num = 0;
while (temp&&num < index - 1)
{
temp = temp->next;
num++;
}
LNode * new_node = new LNode;
new_node->next = temp->next;
cin >> new_node->data;
temp->next = new_node;
return true;
}
bool deleteitem(Listlist & L, int index, int &item)
{
if (index<1 && index>listlength(L))
{
return false;
}
LNode * temp=L;
int num = 0;
while (temp&&num < index - 1)
{
temp = temp->next;
num++;
}
item = temp->next->data;
temp->next = temp->next->next;
return true;
}
原文:https://www.cnblogs.com/lu-007/p/9737371.html