链表模板
#include<iostream>
using namespace std;
struct node
{
int data;
node *next;
}Node;
class link
{
private:
node *head;
public:
link() { head = (node*)new node[1]; head = NULL; }
~link();
bool clear();
bool isempty() { if (head == NULL)return true; else return false; }
bool insert(int i, int e);
bool delet(int i, int *e);
bool creat(int *a, int len);
void show();
void reverse();
};
link::~link()
{
node *p = head;
while (head)
{
p = head;
head = head->next;
delete(p);
}
}
bool link::clear() //清楚链表
{
node *p = head;
while (head)
{
p = head;
head = head->next;
delete(p);
}
return true;
}
bool link::insert(int i, int e) //在位置i插入元素
{
node *p = head, *s;
int j = 0;
if (i == 0)
{
s = (node*)new node[1];
s->data = e;
s->next = p;
head = s;
return true;
}
while (p != NULL&&j<i-1)
{
p = p->next;
j++;
}
if(p==NULL)
{
return false;
}
s = (node *)new node[1];
s->data = e;
s->next = p->next;
p->next = s;
return true;
}
bool link::delet(int i, int *e) //链表删除节点
{
node *p = head, *s;
int j = 0;
if (p == NULL) return false;
if (i == 0)
{
head = head->next;
*e = p->data;
delete p;
p = NULL;
return true;
}
while(p&&j<i-1)
{
p = p->next;
j++;
}
if(p==NULL)
{
return false;
}
s = p->next;cout << s->data << endl;
*e = s->data;
p->next = p->next->next;
delete s;
s = NULL;
return true;
}
bool link::creat(int *a, int len) //用数组a建立链表
{
node *s;
if (len == 0) return false;
for(int i=0;i<len;i++)
{
s = (node*) new node[1];
s->data = a[i];
s->next = head;
head = s;
}
return true;
}
void link::show()
{
node *p = head;
while(p)
{
cout << p->data << endl;
p = p->next;
}
}
void link::reverse() //反转链表
{
node *q = head->next, *p = head,*s;
if (head == NULL||head->next==NULL) return;
head->next = NULL;
while (q)
{
s = q->next;
q->next = p;
p = q;
q = s;
}
head = p;
return;
}
int main()
{
int x[100];
int len;
int l = 0;
int *de = &l;
cin >> len;
for(int i=0;i<len;i++)
{
cin >> x[i];
}
link linkw;
if (linkw.creat(x, len)) cout << "建立成功!" << endl;
if (linkw.insert(0, 999)) cout << "插入成功!\n";
if (linkw.delet(0, de))cout << "删除"<<*de<<"成功!\n";linkw.show();
linkw.reverse();
linkw.show();
}