#include <iostream>
using namespace std;
template<typename T>
struct node
{
T num;
node<T> *next;
};
template<typename T>
class list
{
public:
list();
~list();
void tranverse();
void insert_node(int place,T n);
void delete_node(int place);
private:
node<T> *p; //链表的临时节点,起过渡作用
node<T> *q;
node<T> *head;
T i;
int length;
};
template<typename T>
list<T>::list()
{
length=0;
cout<<"请输入您想输入的数字,以任意非数字字符退出"<<endl;
cin>>i;
if(cin.good())
{
head=new node<T>;
head->next=NULL;
head->num=i;
p=head;
q=NULL;
length++;
}
while(cin.good())
{
cout<<"请输入您想输入的数字,以任意非数字字符退出"<<endl;
cin>>i;
if(cin.good())
{
q=p;
p=new node<T>;
p->num=i;
p->next=NULL;
q->next=p;
length++;
}
else
break;
}
}
template<typename T>
void list<T>::tranverse()
{
p=head;
while(p!=NULL)
{
cout<<p->num<<endl;
p=p->next;
}
}
template<typename T>
void list<T>::insert_node(int place,T n)
{
if(place<=0 || place>length)
cout<<"您输入的插入位置有误"<<endl;
else if(length==0)
{
head=new node<T>;
head->num=n;
head->next=NULL;
}
else
{
q=head;
while((--place)>=1)
{
q=q->next;
}
p=new node<T>;
p->num=n;
p->next=q->next;
q->next=p;
}
}
template<typename T>
void list<T>::delete_node(int place)
{
if(place<=0 || place>length)
cout<<"您输入的位置有误"<<endl;
else
{
if(place==1)
{
q=head->next;
free(head);
head=q;
}
else
{
q=head;
while((--place)>=2)
q=q->next;
p=q->next;
q->next=p->next;
free(p);
}
}
}
void main()
{
list<int> *head=new list<int>;
head->tranverse();
cout<<"插入操作:在第二个位置插入10(举个例子)"<<endl;
//head->insert_node(2,10);
head->delete_node(2);
cout<<endl;
head->tranverse();
system("pause");
}