#include<iostream>
#include<cstdio>
using namespace std;
template <class T>
class Node
{ public:
T num;
Node<T> *next;
Node(T a=0,Node<T> *p=NULL);
Node(Node<T> &a);
~Node();
T getData(void);
};
template<class T>
Node<T>::Node(T a,Node<T> *p):num(a),next(p)
{
cout<<"Node Constructor run"<<endl;
}
template<class T>
Node<T>::Node(Node<T> &a)
{ num=a.num;
cout<<"Node CopyConstructor run"<<endl;
}
template<class T>
Node<T>::~Node()
{cout<<"Node Destructor run"<<endl;}
template<class T>
T Node<T>:: getData(void)
{
return num;}
template<class T>
class LinkList
{
public:
Node<T> *position;
Node<T> *position2;
Node<T> headNode;
int size;
LinkList(T*s=NULL,int b=0,Node<T> *p1=NULL,Node<T> *p2=NULL);
~LinkList()
{
position2=headNode.next;
for(int i=1;i<=size;i++)
{
delete position2;
position2=position2->next;}
cout<<"LinkList Destructor run"<<endl;
}
LinkList(LinkList<T> &s );
void insertNode(Node<T> &a);
bool searchNode(T value);
int getSize();
void next();
Node<T> &currNode()const;
void delNode();
void show();
};
template <class T>
LinkList<T>::LinkList(T s[],int b,Node<T> *p1,Node<T> *p2):size(b),position(p1),position2(p2)
{
position=&headNode;
position2=&headNode;
for(int i=0;i<size;i++)
{ position2=new Node<T>;
position2->num=s[i];
position->next=position2 ;
position=position2 ;
}
position=headNode.next;
cout<<"LinkList Constructor run"<<endl;
}
template<class T>
LinkList<T>::LinkList(LinkList<T> &a)
{
size=a.size;
a.position=&a.headNode;
headNode.num=0;
position=&headNode;
for(int i=0;i<size;i++)
{ position2=new Node<T>;
position->next=position2;
position=position->next;
a.position=a.position->next;
position->num=a.position->num;
}
cout<<position2->num<<endl;
cout<<"LinkList CopyConstructor run"<<endl;
}
template <class T>
void LinkList<T>:: insertNode(Node<T>&a)
{
a.next=position2->next;
position2->next=&a;
}
template <class T>
bool LinkList<T>::searchNode(T value)
{ position=&headNode;
int t=0;
for(int i=1;i<=size;i++)
{ position=position->next;
if(position->num==value)
{ t=1;return 1;break;
}
}
if(t==0)
{
position=headNode.next;
return false;}
}
template <class T>
int LinkList<T>::getSize()
{
return size;}
template <class T>
void LinkList<T>::next()
{position=position->next ;
}
template <class T>
Node<T>& LinkList<T>::currNode()const
{ return *position;
}
template <class T>
void LinkList<T>::delNode()
{ position2=&headNode;
while(position2->next!=position)
{ position2=position2->next;
}
position2->next=position->next;
}
template <class T>
void LinkList<T>::show()
{
position=&headNode;
position2=&headNode;
for(int i=1;i<=size;i++)
{ position=position->next;
cout<<"["<<position->num<<"]";
}
cout<<endl;
}
int main()
{
int i,a[5]= {0,1,2,3,4};
for(i=0;i<5;i++)
scanf("%d",&a[i]);
LinkList<int> l1(a,5),l2(l1);
cout<<l2.getSize()<<endl;
l1.show();
if (l2.searchNode(2))
cout<<"Found:"<<l2.currNode().getData()<<endl;
else
cout<<"Not Found"<<endl;
l2.delNode();
Node <int> *p1=new Node<int>(11);
l2.insertNode(*p1);
l2.show();
return 0;
} //代码运行无错误,但是在pintia上出现运行时错误