#include "stdafx.h"
#include<iostream>
using namespace std;
template <class T>
struct Node
{
T data;
Node<T> *next;
};
template <class T>
class LinkList
{
public:
LinkList() { first = new Node<T>; first->next = NULL; }
LinkList(T a[], int n);
~LinkList();
int Length();
T Get(int i);
int Locate(T x);
void Insert(int i, T x);
T Delete(int i);
void PrintList();
private:
Node<T> *first;
};
template <class T>
LinkList<T>::LinkList(T a[], int n)
{
first = new Node<T>;
first->next = NULL;
Node<T> *r = first;
for (int i = 0; i < n; i++)
{
Node<T> *s = new Node<T>;
s->data = a[i];
r->next = s;
r = s;
}
r->next = NULL;
}
template <class T>
void LinkList<T>::Insert(int i, T x)
{
Node<T> *p;
p = first; int j = 0;
while (p && j < i - 1)
{
p = p->next;
j++;
}
if (!p) throw "位置";
else
{
Node<T> *s;
s = new Node<T>;
s->data = x;
s->next = p->next;
p->next = s;
}
}
template<class T>
LinkList<T>::~LinkList()
{
Node <T> *p = first;
while (p)
{
Node<T> *q = p;
p = p->next;
delete q;
}
}
template <class T>
void LinkList<T> ::PrintList()
{
Node<T> *p = first->next;
while (p != NULL)
{
cout << p->data << " ",
p = p->next;
}
cout << endl;
}
template <class T>
T LinkList<T>::Get(int i)
{
Node<T> *p;
p = first->next; int j = 1;
while (p && j<i)
{
p = p->next;
j++;
}
if (!p) throw "位置";
else return p->data;
}
template <class T>
T LinkList<T>::Delete(int i)
{
Node<T> *p = first; int j = 0;
while (p && j<i - 1)
{
p = p->next;
j++;
}
if (!p | | !p->next) throw "位置";
else {
q = p->next; x = q->data;
p->next = q->next;
delete q;
return x;
}
}
int main()
{
int r[] = { 1,-2,3,-4,-5,6,-7,8,9,10 };
LinkList<int> List(r, 10);
List.PrintList();
system("pause");
return 0;
}