#include<iostream>
using namespace std;
struct Node
{
int data;
Node* next;
};
void Print(Node* head)
{
Node* p;
p = head->next;
while (p)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
void Set(Node* &head)
{
Node* q, * p; int m, n;
head = (Node*)new Node;
head->next = NULL;
q = head;
cout << "正在创建单链表__请输入节点个数:";
cin >> m;
for (int i = 0; i < m; i++)
{
cout << "请输入节点数据:" << endl;
cin >> n;
p = (Node*)new Node;
p->data = n;
q->next = p; q = p;
}
q->next = NULL;
}
void Search(Node*&P,int n,int& pan)
{
Node * q;
int j = 0;
while (P && j < n - 1)
{
P = P->next;
j++;
}
if (!P || j > n - 1)
{
cout << "该位置不存在!" << endl;
return;
}
pan = 1;
}
void Insert(Node* L)
{
int n,e,pan = 0;
Node*P=L,* E;
cout << "请输入要插入的位置" <<endl;
cin >> n;
Search(P,n,pan);
if (pan == 0)
return;
cout << "请输入要插入的数据" <<endl;
cin >> e;
E = (Node*)new Node;
E->data = e;
E->next = P->next;
P->next = E;
}
void Delete(Node* L)
{
int n, e,pan;
Node* P = L,*q;
cout << "请输入要删除的位置" << endl;
cin >> n;
Search(P, n, pan);
if (pan == 0)
return;
q = P->next;
e = q->data;
P->next = q->next;
delete q;
cout << "元素 " << e << " 已删除" << endl;
}
void Conver(Node*& L)
{
Node* p, * q, * r;
p = L->next;
q = p->next;
p->next = NULL;
while (q)
{
r = q->next;
q->next = p;
L->next = q;
p = q;
q = r;
}
}
int main()
{
Node *L;
Set(L);
Print(L);
Insert(L);
Print(L);
int e;
Delete(L);
Print(L);
Conver(L);
cout << "逆置结果为:";
Print(L);
}