#include<iostream>
using namespace std;
struct Node
{
int data;
Node* next;
};
class LinkList
{
public:
LinkList(int a[], int n);
int Get1(int i);
int Get2(int x);
void Insert(int i, int x);
int Delete(int i);
void PrintList();
private:
Node* first;
};
LinkList::LinkList(int a[], int n)//头插法
{
first = new Node;
first->next = NULL;//生成头节点,并把头结点的指针域置空
for (int i = 0; i < n; i++)
{
Node* s = NULL;
s = new Node;
s->data = a[i];
s->next = first->next;
first->next = s;
}
}
void LinkList::PrintList()
{
Node* p = first->next;
while (p != NULL)
{
cout << p->data << " ";
p = p->next;
}cout << endl;
}
int LinkList::Get1(int i)
{
Node* p = first->next;
int count = 1;
while (p != NULL && count < i)
{
p = p->next;
count++;
}if (p == NULL)throw"查找位置错误";
else
{
return p->data;
}
}
int LinkList::Get2(int x)
{
Node* p = first->next;
int count = 1;
while (p != NULL)
{
if (p->data == x)
{
return count;
}
else
{
p = p->next;
count++;
}
}return 0;
}
void LinkList::Insert(int i, int x)
{
Node* p = first->next;
int count = 1;
while (p != NULL && count < i - 1)//在i-1的位置处停下
{
p = p->next;
count++;
}if (p == NULL)throw"插入位置错误";
else
{
Node* s = NULL;
s = new Node;
s->data = x;
s->next = p->next;
p->next = s;
}
}
int LinkList::Delete(int i)
{
int x;
Node* p = first->next;
Node* q = NULL;
int count = 1;
while (p != NULL && count < i - 1)//在i-1的位置处停下。
{
p = p->next;
count++;
}if (p == NULL||p->next==NULL)throw"删除位置错误";//不要忘了p->next==NULL这个条件
else
{
q = p->next;
x = q->data;
p->next = q->next;
delete q;
return x;
}
}
int main()
{
int r[5] = { 1,2,3,4,5 };
LinkList s(r, 5);
s.PrintList();
cout<<s.Get1(2)<<endl;
cout << s.Get2(1) << endl;
s.Insert(2, 8);
s.PrintList();
s.Delete(2);
s.PrintList();
}