# include<iostream>
typedef int ElemType;
typedef struct Lnode {
ElemType data;
struct Lnode* next;
}Lnode, *Linklist;
bool InitList_L(Linklist& L) {
/*
初始化单向链表。
*/
L = new Lnode;
if (!L)
return false;
L->next = NULL;
return true;
}
bool CreateList_H(Linklist& L) {
/*
创建单向链表。
*/
int x = 1;
std::cout << "请输入您要插入的数字" << std::endl;
std::cin >> x;
while (x != -1) {
/*
使用头插法建立单向链表。
*/
Linklist p;
p = new Lnode;
if (!L)
return false;
p->data = x;
p->next = L->next;
L->next = p;
std::cout << "请输入您要插入的数字" << std::endl;
std::cin >> x;
}
return true;
}
bool CreateList_T(Linklist L) {
/*
使用尾插法,建立单向链表。
*/
int x;
std::cout << "请输入您要插入的数字,-1表示结束" << std::endl;
std::cin >> x;
Linklist p, q;
p = L; // 创建尾部指针。
while (x != -1) {
q = new Lnode;
if (!q)
return false;
q->data = x;
q->next = NULL;
p->next = q;
p = q;
std::cout << "请输入您要插入的数字,-1表示结束" << std::endl;
std::cin >> x;
}
}
void PrintList(Linklist& L) {
Linklist p;
p = L->next;
while (p != NULL) {
std::cout << p->data << std::endl;
p = p->next;
}
}
bool GetElem_L(Linklist L, int i, int& e) {
/*
获取列表第i个元素的值
*/
Linklist q;
q = L->next;
if (i < 1)
return false;
if (!q)
return false;
int j = 0;
while (j < i - 1) {
q = q->next;
if (!q)
return false;
j++;
}
e = q->data;
return true;
}
bool LocateElem_L(Linklist L, int e) {
/*
查找单向链表中的元素;
*/
Linklist p;
p = L;
while (p && p->data != e) {
p = p->next;
}
if (!p)
return false;
return true;
}
bool ListInsert_L(Linklist& L, int i, int e) {
Linklist p, q;
p = L->next;
if (i < 1)
return false;
int j = 0;
while (j < i - 2 && p) {
p = p->next;
j++;
}
if (j != i - 2)
return false;
q = new Lnode;
q->data = e;
q->next = p->next;
p->next = q;
return true;
}
bool ListDelete_L(Linklist& L, int i) {
Linklist p, q;
p = L->next;
int j = 0;
while (p && j < i - 2) {
p = p->next;
j++;
}
if (j != i - 2)
return false;
q = p->next;
p->next = p->next->next;
delete q;
return true;
}
int main() {
Linklist L;
InitList_L(L);
CreateList_H(L);
//CreateList_T(L);
int x, e;
//std::cout << "请输入您要获取第几个元素的值" << std::endl;
//std::cin >> x;
//GetElem_L(L, x, e);
//std::cout << "程序获取的元素为:" << e << std::endl;
//std::cout << "请输入您要查找的数据" << std::endl;
//std::cin >> e;
//std::cout << LocateElem_L(L, e) << std::endl;
//std::cout << "请输入您要插入元素的位置" << std::endl;
//std::cin >> x;
//std::cout << "请输入您要插入的元素" << std::endl;
//std::cin >> e;
//ListInsert_L(L, x, e);
std::cout << "请输入您要删除元素的位置" << std::endl;
std::cin >> x;
ListDelete_L(L, x);
PrintList(L);
return true;
}