#include<iostream>usingnamespacestd;
typedefstruct Node{ // 定义结点int date;
struct Node *next;
}LNode, *LinkList;
LinkList initList() // 初始化链表
{
LinkList head = new LNode; // 创建头节点
head->next = nullptr; // 头节点的next域为空指针return head;
}
int isEmpty(LinkList L) // 判断链表是否为空
{
return L->next == nullptr;
}
void back_insert(LinkList L, int e) // 在链表末尾插入元素
{
LNode* q = new LNode; // 为节点申请空间
q->date = e;
q->next = nullptr;
if (L->next == nullptr) // 如果链表为空
{
L->next = q;
}
else
{
LNode* p = L->next; // p初始化为头节点的next节点while (p->next != nullptr)
{
p = p->next;
}
p->next = q; // 赋值
}
}
int getElemIndex(LinkList L, int e) // 查找某个元素所在位置
{
LNode* p = L->next; // 这里假设头节点的下标为0int i = 1;
while (p)
{
if (p->date == e) // 查找成功,则返回下标return i;
p = p->next;
i++;
}
cout << "Not exist!" << endl;
return -1;
}
int getIndexElem(LinkList L, int i) // 求某个位置的元素
{
LNode* p = L->next;
int j = 0;
while (p && ++j < i)
{
p = p->next;
}
if (!p || j > i)
{
cout << "Index Error!";
return -1;
}
elsereturn p->date;
}
void insert_after(LinkList L, int index, int value) // 在某位置之后插入元素
{
LNode* p = L->next;
LNode* q = new LNode; // 创建一个临时节点
q->date = value;
int i = 0;
while (p&& ++i < index)
{
p = p->next;
}
if (!p || i > index)
{
cout << "Index Error!";
}
q->next = p->next; // q的next域指向p后面的节点
p->next = q; // p的next指向q
}
void insert_before(LinkList L, int index, int value) // 在某位置之前插入元素
{
LNode* p = L->next;
LNode* q = new LNode; // 创建一个临时节点int i = 0;
while (p&& ++i < index)
{
p = p->next;
}
if (!p || i > index)
{
cout << "Index Error!";
}
q->next = p->next; // q的next域指向p后面的节点
p->next = q; // p的next指向q
q->date = p->date; // 调换数据域
p->date = value;
}
void delete_node(LinkList L, int index) // 删除指定位置节点
{
LNode* p = L;
LNode* q = p->next; // 创建一个临时节点q指向p的nextint j = 0;
while (q && ++j < index)
{
q = q->next;
p = p->next;
}
if (!p || j > index)
{
cout << "Index Error!";
}
p->next = q->next;
delete q; // 释放q
}
void print(LinkList L) // 显示链表内容
{
LNode *p = L->next;
while (p)
{
cout << p->date<<" ";
p = p->next;
}
cout << endl;
}
int main()
{
constint date[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
LinkList myLinkList = new LNode;
myLinkList = initList();
if (isEmpty(myLinkList))
cout << "Empty list, now insert some values... " << endl;
for (int i = 0;i < 9;i++)
{
back_insert(myLinkList, date[i]);
}
cout << "Now the linklist contents: " << endl;
print(myLinkList);
cout << "The value 6's index is:" << getElemIndex(myLinkList, 6) << endl;
cout << "The index 6's value is: " << getIndexElem(myLinkList, 6) << endl;
cout << "Input a number inserting after 6: \n";
int number;
cin >> number;
insert_after(myLinkList, 6, number);
cout << "Now the Linklist is: " << endl;
print(myLinkList);
cout << "Input a number inserting before 6: \n";
int number1;
cin >> number1;
insert_before(myLinkList, 6, number1);
cout << "Now the Linklist is: " << endl;
print(myLinkList);
cout << "Input the index to delete: " << endl;
int index;
cin >> index;
delete_node(myLinkList, index);
cout << "Now the Linklist is: " << endl;
print(myLinkList);
delete myLinkList;
system("pause");
return0;
}
运行结果
Empty list, now insertsomevalues...
Now the linklist contents:
123456789
The value6's index is:6
The index 6's valueis: 6Input a number inserting after6:
666
Now the Linklist is:
123456666789Input a number inserting before6:
555
Now the Linklist is:
123455556666789Input the index todelete:
7
Now the Linklist is:
12345555666789