#include <iostream>
#include <string>
using namespace std;
typedef struct LNode
{
int id, grade;
struct LNode* next;
}Lnode , *LinkList;
void make_H(LinkList &l) //头插法
{
l = new LNode;
l->next = NULL;
char t;
cin >> t;
while (t=='Y')
{
LinkList p = new LNode;
cin >> p->id >> p->grade;
p->next = l->next;
l->next = p;
cin >> t;// t 作为判断是否继续添加的条件
}
}
void make_E(LinkList& l)
{
l = new LNode;
l->next = NULL;
LinkList r = l;
char t;
cout << "输入 Y 执行输入数据操作:";
cin >> t;
while (t == 'Y')
{
LinkList p = new LNode;
cin >> p->id >> p->grade;
p->next = nullptr;
r->next = p;
r = p;
cout << "是否继续输入数据(Y/N):";
cin >> t; // t 作为判断是否继续添加的条件
}
}
void insert_L(LinkList& l,int e)
{
if (e == -1)
{
LinkList p = new LNode;
cout << "请输入插入成员的数据(id , grade):";
cin >> p->id >> p->grade;
p->next = l->next;
l->next = p;
}
else
{
if (!e) {
cout << "请输入非0数字" << endl; return ;}
LinkList p1 = l->next;
e = e - 1;
while (p1&& e--)
{
p1 = p1->next;
}
if (e)
{
cout << "该同学不存在" << endl;
return;
}
LinkList insert = new LNode;
cout << "请输入插入成员的数据(id , grade):";
cin >> insert->id >> insert->grade;
insert->next = p1->next;
p1->next = insert;
return;
}
}
int delete_L(LinkList& l, int id)
{
LinkList p = l;
while (p->next )
{
if (p->next->id == id)
{
LinkList temp = p->next;
p->next = temp->next;
delete temp;
return 1;
}
p = p ->next;
}
return 0;
}
void print_L(LinkList &l)//按顺序输出
{
LinkList p1 = l->next;
while (p1)
{
cout << p1->id << " --> " << p1->grade << endl;
p1 = p1->next;
}
}
void change_L(LinkList& l)// 倒序链表
{
LinkList p1, p2;
p1 = l;
p2 = l->next;
l->next = NULL;
while (p2)
{
p1 = p2;
p2 = p2->next;
p1->next = l->next;
l->next = p1;
}
}
int main()
{
LinkList l;
make_E(l);
print_L(l);
int id;
cout << "请输入要删除的学生的id:";
cin >> id;
if (delete_L(l, id))
{
cout << "删除操作执行成功!" << endl;
print_L(l);
}
else
{
cout << "该学生不存在" << endl;
print_L(l);
}int e;
cout << "请输入要插入在第几位的后面(输入-1代表插入第一位,输入0产生错误):";
cin >> e;
insert_L(l, e);
print_L(l);
change_L(l);
cout << "倒序后列表为:" << endl;
print_L(l);
return 0;
}
使用Vs 2022 调试结果为